mysql - 按日期和 Case 语句分组的 SQL 语法

标签 mysql group-by case

我的 mysql 数据库类似于以下内容,并且正在努力正确使用 case、group by 和 order by 语句。示例数据集:

ID     Date          Direction
1      2017-04-01    1
2      2017-04-01    1
3      2017-04-01    -1
4      2017-04-01    1
5      2017-04-01    -1
6      2017-04-01    1
7      2017-04-02    -1
8      2017-04-02    -1
9      2017-04-02    -1
10     2017-04-02    1
11     2017-04-02    -1
12     2017-04-03    -1

我试图了解聚合此表并按日期分组的最佳方法,以便查询返回以下记录集。下面的“正”列只是方向列(上方)的计数,其中方向 > 0。类似地,“负”列是方向列的计数,其中方向 < 0,如下所示:

DATE         positive      negative   
2017-04-01   4             2
2017-04-02   1             4
2017-04-03   0             1

我试过:

 SELECT DATE, 
        CASE
            WHEN direction < 0 THEN 'negative'
            WHEN direction > 0 THEN 'positive'
        END AS updownType, count(*) AS updownCount
        FROM table WHERE DATE BETWEEN '2017-04-01' AND '2017-04-03'
        GROUP BY DATE, updownType
        ORDER BY DATE ASC

我已经查看了关于该主题的数十个 SO 线程,但还没有遇到我正在寻找的内容。任何建议表示赞赏

最佳答案

哎呀,你只是想念它。见下文

SELECT DATE, 
        count(CASE WHEN direction < 0 THEN '1' END) AS negative,
        Count(CASE WHEN direction > 0 THEN '1' END) AS positive 
        FROM table WHERE DATE BETWEEN '2017-04-01' AND '2017-04-03'
        GROUP BY DATE
        ORDER BY DATE ASC

关于mysql - 按日期和 Case 语句分组的 SQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579350/

相关文章:

mysql - 按不使用 2 个字段总和进行分组

mysql - 如何使用 ORDER BY/GROUP BY 忽略某些表达式?

mysql - NHibernate:按 ID 集合排序结果

sql - PostgreSQL 中的慢 GroupAggregate

MySQL 让它识别 0 小于 A in case 语句

mysql - 如何使用单个 mysql 查询批量更新具有多个条件或条件的多个字段或列

php - 在 HTML 文本区域中用 php 变量替换单词

mysql - mysql中如何用join代替union

where `case when` 中的 MySQL 子句

sql - 如果组为空,则从查询中删除结果