我对mySQL相当陌生,但我真的很绝望。请试着对我放松一下。
我想写一份关于一家酒店的报告。现在,我的查询可以告诉我,有多少不同的旅程,其中订了多少个晚上。
举一个例子:
SELECT i.numberofnights,
SUM(CASE WHEN i.nod >='1' THEN '1' ELSE '0' END) as journeyCount
FROM itinerary i
WHERE i.arrival BETWEEN '2015-01-01' AND '2015-01-31'
GROUP BY i.numberofnights我的产出:
NoN | journeyCount
1 | 18
2 | 6
3 | 4
4 | 13
5 | 12
6 | 5
7 | 9它显示我有18次旅行,有1晚,6次有2晚,等等。我的愿望是做一个选择,所以合并1至3个晚上和4至7个晚上的结果。请帮帮我!
我想要的输出:
NoN | journeyCount
1-3 | 28
4-7 | 39(请预先多谢:)
发布于 2016-02-29 16:05:27
可以在GROUP BY子句中使用整数除法:
SELECT (i.numberofnights-1) DIV 3,
SUM(CASE WHEN i.nod >=1 THEN 1 ELSE 0 END) as journeyCount
FROM itinerary i
WHERE i.arrival BETWEEN '2015-01-01' AND '2015-01-31'
GROUP BY (i.numberofnights-1) DIV 3如果您只想要两个段,一个用于<=3,另一个用于> 3,那么您可以使用:
SELECT IF(CASE WHEN i.numberofnights <= 3 THEN 0 ELSE 1 END = 0, '1-3', '4-7') AS NoN,
SUM(CASE WHEN i.nod >=1 THEN 1 ELSE 0 END) as journeyCount
FROM itinerary i
WHERE i.arrival BETWEEN '2015-01-01' AND '2015-01-31'
GROUP BY CASE WHEN i.numberofnights <= 3 THEN 0 ELSE 1 END编辑:
要获得类似于'1-3‘、'4-6’等的桶标记,可以使用以下查询:
SELECT CONCAT(((i.numberofnights-1) DIV 3 + 1) * 3 - 2,
'-',
((i.numberofnights-1) DIV 3 + 1) * 3) AS NoN,
SUM(CASE WHEN i.nod >=1 THEN 1 ELSE 0 END) as journeyCount
FROM itinerary i
WHERE i.arrival BETWEEN '2015-01-01' AND '2015-01-31'
GROUP BY (i.numberofnights-1) DIV 3Demo here
https://stackoverflow.com/questions/35704018
复制相似问题