使用sum和join对行进行分组(Build summary)

时间:2013-12-25 05:49:43

标签: mysql sql select group-by sum

有一个这样的行集:

| ID |     OP_CODE | OWNER |  MEASURE | COUNT |
|----|-------------|-------|----------|-------|
|  1 | Operation 1 |     1 | Geometry |    42 |
|  2 | Operation 1 |     1 | Geometry |    48 |
|  3 | Operation 1 |     1 |   Vacuum |    29 |
|  4 | Operation 1 |     1 |  Electro |    14 |
|  5 | Operation 1 |     2 | Geometry |    87 |
|  6 | Operation 1 |     2 | Geometry |   112 |
|  7 | Operation 1 |     2 |   Vacuum |    78 |
|  8 | Operation 1 |     3 |   Vacuum |    56 |
|  9 | Operation 1 |     3 |  Electro |    78 |

我希望按所有者对行进行分组,并将其他度量(列MEASURE的值)与列计数的总和合并/加入此结果,如下所示:

| OWNER | GEOMETRY_CNT | VACUUM_CNT | ELECTRO_CNT | TOTAL_CNT |
|-------|--------------|------------|-------------|-----------|
|     1 |           90 |         29 |          14 |       133 |
|     2 |          199 |         78 |      (null) |       277 |
|     3 |       (null) |         56 |          78 |       134 |

在这种情况下,Geometry_cnt,Vacuum_cnt,Electro_cnt是第一个表中相应值的总和:

Owner_1_Geometry_cnt = 42 + 48 = 90;

Owner_1_Vacuum_cnt = 29;

Owner_1_Electro_cnt = 14;

Owner_1_TOTAL = 29 + 14 + 90 = 133;

如何获取此行集?

SQL Fiddle

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT a.OWNER, SUM(IF(a.MEASURE = 'Geometry', a.COUNT, 0)) GEOMETRY_CNT, 
       SUM(IF(a.MEASURE = 'Vacuum', a.COUNT, 0)) VACUUM_CNT, 
       SUM(IF(a.MEASURE = 'Electro', a.COUNT, 0)) ELECTRO_CNT, 
       SUM(a.COUNT) TOTAL_CNT
FROM operations_schedule a 
GROUP BY a.OWNER

检查SQL FIDDLE DEMO

<强>输出

| OWNER | GEOMETRY_CNT | VACUUM_CNT | ELECTRO_CNT | TOTAL_CNT |
|-------|--------------|------------|-------------|-----------|
|     1 |           90 |         29 |          14 |       133 |
|     2 |          199 |         78 |           0 |       277 |
|     3 |            0 |         56 |          78 |       134 |