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