一天内多个项目的单独计数MySQL

时间:2012-06-29 19:25:22

标签: mysql

我正在尝试一次显示多个索赔的状态。例如,“date1”有3个声明。每项索赔都有不同的地位。如何在“date1”中显示所有声明的状态计数。也就是说,我想从最早到最晚的日期订购我的结果,然后有三列,其中包含当天有多少索赔具有该状态的计数。三个状态列应该与当天的索赔总数相加。这就是我想要的样子:( St1 - St3代表独特的状态)

Date      St1 St2 St3
12-02-12 | 1 | 2 | 3
12-03-12 | 2 | 5 | 3
12-04-12 | 7 | 3 | 8

我开始使用的查询看起来像这样,但它完全不正确。

SELECT dates, statuses, COUNT(*) AS St1 FROM table_dates GROUP BY dates;

这是我试图获得只有一个状态的计数。想我必须从某个地方开始。谢谢。

2 个答案:

答案 0 :(得分:3)

您想要为GROUP BY添加状态:

SELECT dates, status, COUNT(*) AS cnt
FROM table_dates
GROUP BY dates, status

这会使您的结果与您提出的格式略有不同:

Date       | Status | cnt
2012-12-02 | 1      | 1 
2012-12-02 | 2      | 2 
2012-12-02 | 3      | 3 
2012-12-03 | 1      | 2 
2012-12-03 | 2      | 5 
2012-12-03 | 3      | 3 
2012-12-04 | 1      | 7 
2012-12-04 | 2      | 3 
2012-12-04 | 3      | 8 

这可能是一种更好的格式,因为如果您以后添加新状态,您的数据库架构,SQL查询和客户端代码都不需要更改。

答案 1 :(得分:2)

你可以做的是这样的事情:

SELECT SUM(if(statuses = st1,1,0)) as st1, 
SUM(if(statuses = st2,1,0)) as st2, 
SUM(if(statuses = st3,1,0)) as st3 
    FROM table_dates 
    GROUP BY dates;