首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:特定值输出的选择

SQL:特定值输出的选择
EN

Stack Overflow用户
提问于 2016-02-29 16:02:22
回答 1查看 28关注 0票数 0

我对mySQL相当陌生,但我真的很绝望。请试着对我放松一下。

我想写一份关于一家酒店的报告。现在,我的查询可以告诉我,有多少不同的旅程,其中订了多少个晚上。

举一个例子:

代码语言:javascript
复制
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

我的产出:

代码语言:javascript
复制
NoN   |   journeyCount
1     |   18
2     |   6
3     |   4
4     |   13
5     |   12
6     |   5
7     |   9

它显示我有18次旅行,有1晚,6次有2晚,等等。我的愿望是做一个选择,所以合并1至3个晚上和4至7个晚上的结果。请帮帮我!

我想要的输出:

代码语言:javascript
复制
NoN   |  journeyCount
1-3   |  28
4-7   |  39

(请预先多谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-29 16:05:27

可以在GROUP BY子句中使用整数除法:

代码语言:javascript
复制
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,那么您可以使用:

代码语言:javascript
复制
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’等的桶标记,可以使用以下查询:

代码语言:javascript
复制
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 3

Demo here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35704018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档