mysql - SQL 查询 - 按季度排序是和否

标签 mysql sql count sql-order-by

我有下表:

id|overtime| date
--+--------+-----------
1 | yes    | 2017-03-10
2 | no     | 2017-07-16
3 | yes    | 2017-01-22
4 | no     | 2017-07-14

现在我想对求和并按季度排序(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 将 bool 值视为数字上下文中的整数,“1”表示 true,“0”表示 false。

关于mysql - SQL 查询 - 按季度排序是和否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46631372/

相关文章:

database - IN 子句在数据库查询中的用法

mysql - 无法将年份与不同的表字段进行比较

php - 如何更新 SELECT 语句的结果?

父类中的 jquery 索引

mysql - 聚合函数的返回值

mysql - 嵌套循环而不同

java - 我们如何使用 JOOQ 计算行数?

count - SAS Enterprise Guide 计数 IF

java - hibernate 删除查询不起作用

PHP/MySQL 从数据库中取出一个表,但从表中排除一个字段?