2016-09-28 22 views
1

我有这样的一个表:使用SELECT结果做出一个表

enter image description here

我想执行下面的SELECT语句:

SELECT count(*) from table WHERE A=1 and date between 2013-02 and 2013-03 
SELECT count(*) from table WHERE A=1 and date between 2013-03 and 2013-04 
SELECT count(*) from table WHERE A=1 and date between 2013-04 and 2013-05 
.... 
SELECT count(*) from table WHERE B=1 and date between 2013-02 and 2013-03 
SELECT count(*) from table WHERE B=1 and date between 2013-03 and 2013-04 
SELECT count(*) from table WHERE B=1 and date between 2013-04 and 2013-05 
...etc 

什么是最快的查询,我可以有结果排列在如下表格中:

date |A=1 |B=1 |C=1 |... 
2013-Feb|count|count|count| 
2013-Mar|count|... 
+0

从日期提取月份并按月执行GROUP BY。最后算。 –

+0

这是一个数据透视表,有关解决方案的示例,请参阅http://stackoverflow.com/questions/7674786/mysql-pivot-table – hruske

回答

1
SELECT DATE_FORMAT(date, '%Y-%m'), 
     SUM(CASE WHEN A=1 THEN 1 END) AS Acount, 
     SUM(CASE WHEN B=1 THEN 1 END) AS Bcount, 
     SUM(CASE WHEN C=1 THEN 1 END) AS Ccount, 
     SUM(CASE WHEN D=1 THEN 1 END) AS Dcount, 
     SUM(CASE WHEN E=1 THEN 1 END) AS Ecount 
FROM table 
GROUP BY DATE_FORMAT(date, '%Y-%m') 

如果列中的值只有A通过E是0或1(或可能NULL),那么我们就可以简化为:

SELECT DATE_FORMAT(date, '%Y-%m'), 
     SUM(A) AS Acount, 
     SUM(B) AS Bcount, 
     SUM(C) AS Ccount, 
     SUM(D) AS Dcount, 
     SUM(E) AS Ecount 
FROM table 
GROUP BY DATE_FORMAT(date, '%Y-%m') 
0


嗨,
你可以有GROUP BY功能

SELECT 
    to_char(date,'YYYY-MM') as date, 
    CASE WHEN A=1 THEN COUNT(A) END as A , 
    CASE WHEN B=1 THEN COUNT(B) END as B , 
    CASE WHEN C=1 THEN COUNT(C) END as C , 
    CASE WHEN D=1 THEN COUNT(D) END as D , 
    CASE WHEN E=1 THEN COUNT(E) END as E 
    from table_name group by date order by date 

此查询根据年份和月份对列进行分组,并为您提供结果

相关问题