gpt4 book ai didi

mysql - 创建一个别名虚拟列,其中包含两列中任一列的值

转载 作者:行者123 更新时间:2023-11-29 12:04:40 25 4
gpt4 key购买 nike

请参阅下面的 SQL 查询:

SELECT * 
FROM
(SELECT
h.hotel_id AS id,h.hotel_city AS city,h.hotel_name AS hotelname,
h.hotel_star AS hotelcat, hwd.double_spl_rate, hwd.third_party_rate,
hwd.extra_bed_spl_rate, hwd.meal_plan_spl,
hwd.third_party_extra_bed, hwd.third_party_meal_plan,
hwd.room_category, hrd.hotel_rate_from, hrd.hotel_rate_to
FROM
hotels_list AS h
INNER JOIN
hotel_rate_detail AS hrd ON h.hotel_id = hrd.hotels_id
INNER JOIN
hotel_week_days AS hwd ON hrd.hotel_id = hwd.h_id
WHERE
(('2015-07-31' BETWEEN hrd.hotel_rate_from AND hrd.hotel_rate_to)
OR
('2015-08-01' BETWEEN hrd.hotel_rate_from AND hrd.hotel_rate_to)
)
AND (h.hotel_city = '1')
AND (hwd.double_spl_rate != 0 OR hwd.third_party_rate != 0)
AND (h.hotel_star = '4')
ORDER BY
hwd.double_spl_rate, hwd.third_party_rate ASC) AS result_table
GROUP BY
result_table.id
ORDER BY
result_table.double_spl_rate, result_table.third_party_rate ASC
LIMIT 0,5;

输出附在下面:

enter image description here

在上面的输出中,有两列 double_spl_ratethird_party_rate,它们可以是 0 或大于零的值。

如何创建仅包含大于零的值的虚拟列别名。让我们假设该列是 final_rate ,其中包含的值为

id   | final_rate
533 | 3776
9228 | 3000

最佳答案

是的,你可以这样做:

select 
id,
case
when coalesce(double_spl_rate,0) = 0
then third_party_rate
else double_spl_rate
end as final_rate
from table

coalesce运算符(operator)将设置 double_spl_rate如果为 null,则为 0,case 表达式将返回 third_party_rate如果double_spl_rate是 0。

如果double_spl_rate不能为空,您可以跳过 coalesce部分。

请注意,上面的代码将始终首选 double_spl_rate 中的值如果两个值都大于 0,则忽略另一个值。如果您不希望出现这种情况,您可以扩展 case 表达式中的逻辑来解决这一问题,并返回值的总和。或者你可以简单地返回 third_party_rate + double_spl_rate在所有情况下。

关于mysql - 创建一个别名虚拟列,其中包含两列中任一列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com