按Enum分组,列为Date,MySQL

时间:2011-08-08 04:06:19

标签: mysql

我正在进行内部联接,我在日期范围(例如,BETWEEN'2011-01-01'和'2011-02-01')之间进行选择,并按枚举值进行分组。有没有办法在每个月作为一个月的列?我现在每个月手工做这个。

示例:

vehicle_type  | January    | February | March
----------------------------------------------
sedan         |     12     |   10     |  4
coupe         |     5      |   7      |  23
truck         |     0      |   0      |  9
electric      |     22     |   10     |  13
hybrid        |     0      |   12     |  0

1 个答案:

答案 0 :(得分:0)

您可以创建日历表...

CREATE TABLE calendar
(
  description  VARCHAR2(100 BYTE),
  when_start   DATE,
  when_end     DATE
)

然后使用数据透视查询 e.g。

SELECT 
    vehicle_type,
    SUM(jan),SUM(feb),
    --add the other months here 
    SUM(nov),SUM(dece) 
FROM 
(
SELECT v.vehicle_type,
CASE WHEN c.description='Jan' THEN
    count(*)
END AS jan,
case when c.description='Feb' THEN
    count(*)
END AS feb,
-- Add the rest of the months here too 
CASE WHEN c.description='Nov' THEN
    COUNT(*)
END AS nov,
CASE WHEN c.description='Dec' THEN
    COUNT(*)
END AS dece
FROM calendar c
INNER JOIN vehicles v ON v.when >= c.when_start AND v.when <= c.when_end  
GROUP BY v.vehicle_type
)
GROUP BY vehicle_type
ORDER BY vehicle_type