2016-09-28 9 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') 

E通じ列Aで唯一の値は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


こんにちは、
あなたは機能

BY GROUPを持つことができます
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 

このクエリは、年と月に基づいて列をグループ化し、結果を提供します。

関連する問題