在 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 |
+-------+-------+-------+-------+---------+---------+---------+
任何帮助将不胜感激...谢谢。
答案 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' )