[英]SQL query - order yes and no by quarter
我有下表:
id|overtime| date
--+--------+-----------
1 | yes | 2017-03-10
2 | no | 2017-07-16
3 | yes | 2017-01-22
4 | no | 2017-07-14
现在,我想对yes
和no
求和,并按四分之一( Q1
, Q2
, Q3
, Q4
)对其进行排序:
yes| no| quarter
---+---+---------------
13 | 4| Q1
2 | 5| Q2
8 | 14| Q3
12 | 12| Q4
我的解决方案:
SELECT
(select count(*) As sum_yes from dashboard where overtime = 'Yes' ) as yes,
(select count(*) As sum_no from dashboard where overtime = 'No' ) as no,
(SELECT quarter(date) as quarter from dashboard)
group by quarter
我知道这行不通。 很高兴获得帮助。
使用条件聚合:
select year(date) as yyyy, quarter(date) as q,
sum(overtime = 'Yes') as yes,
sum(overtime = 'No') as no
from dashboard
group by yyyy, q;
请注意,这包括年份。 我将“季度”解释为按年份区分。 如果要合并多年的数据,请删除该组件。
MySQL在数值上下文中将布尔值视为整数,其中“ 1”为true,“ 0”为false。
所以你每季度要排一行...
...
FROM dashboard
GROUP BY quarter(date);
然后,您想获得一列,其中该行的计数为overtime = 'Yes'
:
SELECT
COUNT(CASE WHEN overtime = 'Yes' THEN 1 END) as yes,
...
还有一个没有
...
COUNT(CASE WHEN overtime = 'No' THEN 1 END) as yes,
...
而已。 case
表达式将匹配的行映射为1,同时将非映射行映射为null
(由于隐含else null
子句)。
只需添加四分之一列即可。
有关此技术的更多信息: http : //modern-sql.com/use-case/pivot
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.