按日期计算相同表格中的3个计数和总和

时间:2014-12-13 03:40:31

标签: mysql sql

我有一张类似下面的表格

|   DATE   |   FULL/PART   |    AMMOUNT    |    CODETYPE    |
|2014-01-02|     PART      |     3.00      |       02       |
|2014-01-02|     PART      |    10.00      |       02       |
|2014-01-03|     PART      |     5.00      |       01       |
|2014-01-03|     FULL      |    10.00      |       03       |
|2014-01-01|     FULL      |    10.00      |       01       |
|2014-01-01|     FULL      |    10.00      |       01       |

我想生成一个统计输出,如下所示

|   DATE   |    CODETYPE    |  SUM(AMMOUNT)FULL | COUNT(AMMOUNT)FULL |  SUM(AMMOUNT)PART |  COUNT(AMMOUNT)PART|
|2014-01-01|       01       |        20.00      |           2        |         0.00      |           0        |
|2014-01-03|       03       |        10.00      |           1        |         0.00      |           0        |
|2014-01-03|       01       |         0.00      |           0        |         5.00      |           1        |
|2014-01-02|       02       |         0.00      |           0        |        13.00      |           2        |

我到目前为止的查询: -

SELECT DATE,CODETYPE,sum(AMMOUNT),count(AMMOUNT) 
FROM myTABLE
WHERE CODETYPE='01' && FULL/PART='FULL' && DATE BETWEEN '2014-01-01' AND '2014-01-31'


SELECT DATE,CODETYPE,sum(AMMOUNT),count(AMMOUNT) 
FROM myTABLE
WHERE CODETYPE='02' && FULL/PART='PART' && DATE BETWEEN '2014-01-01' AND '2014-01-31'


SELECT DATE,CODETYPE,sum(AMMOUNT),count(AMMOUNT) 
FROM myTABLE
WHERE CODETYPE='03' && FULL/PART='PART' && DATE BETWEEN '2014-01-01' AND '2014-01-31'

最后GROUP BY DATE,CODETYPE

每个日期都有完整或部分,不同的CODETYPE(01,02,03,...),我必须将数据汇总到上面的输出中,

DATE 2014-01-01,sum()和count()AMDOUNT,其中CODETYPE ='01'且按日期分组

我应该如何实现它?或者是否有任何查询功能可以解决我不知道的这个问题(我是新来的SQL)?

修改: 日期范围和CODETYPE基于用户需求。

1 个答案:

答案 0 :(得分:3)

您想要条件聚合:

SELECT DATE, CODETYPE,
       SUM(CASE WHEN `FULL/PART` = 'FULL' THEN AMOUNT END) as AMOUNT_FULL,
       SUM(`FULL/PART` = 'FULL') as CNT_FULL,
       SUM(CASE WHEN `FULL/PART` = 'PART' THEN AMOUNT END) as AMOUNT_PART,
       SUM(`FULL/PART` = 'PART') as CNT_PART
FROM myTABLE
WHERE FDATE BETWEEN '2014-01-01' AND '2014-01-31'
GROUP BY DATE, CODETYPE