我编写了一个SQL查询来获取每种机票类型的最高和最低价格,如下所示
select A.ticket_type,C.min_price, B.max_price
from ticket
as A inner join (select ticket_type, max(original_price) as max_price
from ticket group by ticket_type) B
inner join (select ticket_type, min(original_price)
as min_price from ticket group by ticket_type) C
on A.ticket_type=B.ticket_type
AND B.ticket_type=C.ticket_type
AND A.original_price=B.max_price
现在,我需要在此查询中添加Discount_price,Discount_from和Discount_to。这意味着如果今天在discount_from和Discount_to之间,则价格将获得discount_price,否则将获得original_price,则最终结果将打印每种票证类型的最高和最低价格。如何添加此if语句?有人可以帮我吗?
谢谢
答案 0 :(得分:1)
首先,我不会仅仅为了找到最小值和最大值而进行内部联接,您可以为此使用group by:
select T.ticket_type,min(T.original_price) min_price, max(T.original_price), mxn_price
from ticket as T
group by T.ticket_type
您可以使用CASE WHEN
来做“ IF”语句在您的情况下,会是这样
select
T.ticket_type,
min(T.original_price) min_price,
max(T.original_price) max_price,
CASE (WHEN GETDATE() BETWEEN discount_from AND discount_to)
THEN MIN(T.discount_price)
ELSE MIN(T.original_price) END price
from ticket as T
group by T.ticket_type
答案 1 :(得分:0)
假设所有其他字段都在表“票证”中,则可以使用:
SELECT A.ticket_type, C.min_price, B.max_price
FROM ticket A
INNER JOIN (SELECT ticket_type,
CASE WHEN ( discount_from <= CURDATE() AND CURDATE() <= discount_to )
THEN max(discount_price)
ELSE max(original_price)
END AS max_price
FROM ticket GROUP BY ticket_type) B
INNER JOIN (SELECT ticket_type,
CASE WHEN ( discount_from <= CURDATE() AND CURDATE() <= discount_to )
THEN min(discount_price)
ELSE min(original_price)
END AS min_price
FROM ticket GROUP BY ticket_type) C
ON A.ticket_type = B.ticket_type
AND B.ticket_type = C.ticket_type
AND A.original_price = B.max_price
答案 2 :(得分:0)
假设您在另一张桌子和SQL SERVER
上有折扣
WITH c1 AS (
SELECT ticket_type, CASE WHEN DATEDIFF(d,discount_from,GETDATE())>-1
AND DATEDIFF(d,GETDATE(),discount_to) >-1 THEN discount_price
ELSE original_price END AS original_price
FROM ticket t
JOIN discount d ON t.ticketType=d.ticketType
)
SELECT c1.ticket_type,MIN(original_price),MAX(original_price)
FROM c1
GROUP BY ticket_type
如果您使用同一张表,请删除联接:)