从“ where”条件自动生成MYSQL列

时间:2018-07-12 18:18:10

标签: mysql loops

我有以下查询以在选择查询中生成列,我手动键入该列,但是我希望通过迭代循环生成列,该循环采用开始日期和结束日期,然后输出之间的相应年份开始日期和结束日期

    SELECT 
        SUM(IF(DATE_FORMAT(a.`Date_First_Seen`,"%Y")="2011",1,0))"2011"
        ,SUM(IF(DATE_FORMAT(a.`Date_First_Seen`,"%Y")="2012",1,0))"2012"
        ,SUM(IF(DATE_FORMAT(a.`Date_First_Seen`,"%Y")="2013",1,0))"2013"
        ,SUM(IF(DATE_FORMAT(a.`Date_First_Seen`,"%Y")="2014",1,0))"2014"
        ,SUM(IF(DATE_FORMAT(a.`Date_First_Seen`,"%Y")="2015",1,0))"2015"
        ,SUM(IF(DATE_FORMAT(a.`Date_First_Seen`,"%Y")="2016",1,0))"2016"
        ,SUM(IF(DATE_FORMAT(a.`Date_First_Seen`,"%Y")="2017",1,0))"2017"
        ,SUM(IF(DATE_FORMAT(a.`Date_First_Seen`,"%Y")="2018",1,0))"2018"
        FROM  year_table a 
WHERE DATE_FORMAT(Date_First_Seen,"%Y") BETWEEN "2011" AND "2018"

1 个答案:

答案 0 :(得分:1)

可以大大减少此查询,并消除了冗余。使用year来获得日期的年份而不必大惊小怪。然后group by year并计算每个组中的日期。

select
    year(date_first_seen) as year_first_seen,
    count(date_first_seen)
from year_table
where year_first_seen between 2011 and 2018
group by year_first_seen

如果您希望将其作为一列,请使用a pivot table。这是an answer about how to accomplish that in MySQL