2017-04-24 83 views
1

我的mysql数据库类似于以下内容,我正在努力正确使用case,group by和order by语句。样本数据集:按语句分组的SQL语法

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线程,但是还没有找到我正在寻找的内容。任何建议表示赞赏

回答

1

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

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 
+0

完美谢谢! – Gunnar