3

我试图一次显示一天的多个索赔的状态。例如,“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;

这是我试图只计算一种状态的尝试。认为我必须从某个地方开始。谢谢你。

4

2 回答 2

3

您想将状态添加到您的 GROUP BY:

SELECT dates, status, COUNT(*) AS cnt
FROM table_dates
GROUP BY dates, 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 查询和客户端代码都不需要更改。

于 2012-06-29T19:27:38.660 回答
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;
于 2012-06-29T19:30:46.343 回答