SQL for Pivot 和 AVG 使用 MySQL 数据库版本 5.5.62

时间:2021-03-22 11:01:01

标签: mysql pivot

在 MySQL 数据库版本 5.5.62 上使用此查询

SELECT
    COUNT( CASE WHEN MONTH ( tData ) = 1 THEN 'Jan' END ) Jan,
    COUNT( CASE WHEN MONTH ( tData ) = 2 THEN 'Feb' END ) Feb,
    COUNT( CASE WHEN MONTH ( tData ) = 3 THEN 'Mar' END ) Mar,
    tname,
    AVG( DATEDIFF( COALESCE ( tClosed, tOpen ), tData )), 1 ) 
    END AS `avg` 
FROM
    `tbl_2021` 
WHERE
        tname IN ( 'ST00' ) 
GROUP BY
    MONTH ( tData );

回报是

+-------+-------+-------+-------+-----+
| Jan   | Feb   | Mar   | tname | avg |
+-------+-------+-------+-------+-----+
| 17970 |     0 |     0 | ST00  | 8.4 |
|     0 | 14429 |     0 | ST00  | 5.2 |
|     0 |     0 | 22685 | ST00  | 0.4 |
+-------+-------+-------+-------+-----+

但我想改为:

+-------+-------+-------+-------+---------+---------+---------+
| Jan   | Feb   | Mar   | tname | avg_Jan | avg_Feb | avg_Mar |
+-------+-------+-------+-------+---------+---------+---------+
| 17970 | 14429 | 22685 | ST00  |   8.4   |   5.2   |   0.4   |
+-------+-------+-------+-------+---------+---------+---------+

任何帮助将不胜感激...谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在 AVG 函数中以与 COUNT 函数相同的方式使用 CASE 语句。 此外,没有必要使用 GROUP BY 子句。

SELECT
    COUNT( CASE WHEN MONTH ( tData ) = 1 THEN 'Jan' END ) Jan,
    COUNT( CASE WHEN MONTH ( tData ) = 2 THEN 'Feb' END ) Feb,
    COUNT( CASE WHEN MONTH ( tData ) = 3 THEN 'Mar' END ) Mar,
    MAX(tname),
    AVG( CASE WHEN MONTH ( tData ) = 1 THEN DATEDIFF( COALESCE ( tClosed, tOpen ), tData ) END ) avg_Jan,
    AVG( CASE WHEN MONTH ( tData ) = 2 THEN DATEDIFF( COALESCE ( tClosed, tOpen ), tData ) END ) avg_Feb,
    AVG( CASE WHEN MONTH ( tData ) = 3 THEN DATEDIFF( COALESCE ( tClosed, tOpen ), tData ) END ) avg_Mar
FROM
    `tbl_2021` 
WHERE
        tname IN ( 'ST00' ) 
相关问题