我正在尝试一次显示多个索赔的状态。例如,“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;
这是我试图获得只有一个状态的计数。想我必须从某个地方开始。谢谢。
答案 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;