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

SQL for Pivot and AVG using MySQL database version 5.5.62

在 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 );

return 是

+-------+-------+-------+-------+-----+
| 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   |
+-------+-------+-------+-------+---------+---------+---------+

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

您可以像COUNT函数一样在AVG函数中使用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' )