根据“where”条件自动生成mysql列

ddarikpa  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(426)

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

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"
s4chpxco

s4chpxco1#

可以显著减少此查询并消除冗余。使用 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

如果要将其作为一列,请使用透视表。下面是一个关于如何在mysql中实现这一点的答案。

相关问题