2016-08-07 8 views
1

テーブルに数年分のデータがあります(お問い合わせ)。すべてのエントリには、電子メール連絡先のタイムスタンプであるcontact_timeフィールドがあります。私は、複数系列のグラフ上にプロットするための毎月または毎週の要約データを作成しようとしています。すべての私が見ているマルチシリーズ(列)MySQLクエリが適切に要約されない

SELECT MONTH(inquiries.contact_time) AS "Date", 
(SELECT 
    COUNT(inquiries.id) AS "Inquiries" 
    FROM inquiries 
    WHERE YEAR(inquiries.contact_time) = "2014" 
) AS "2014", 
(SELECT COUNT(inquiries.id) AS "Inquiries" 
    FROM inquiries 
    WHERE YEAR(inquiries.contact_time) = "2015" 
) AS "2015" 
FROM inquiries 
GROUP BY MONTH(inquiries.contact_time) 

など、そのために、私は2列目の2014年から、それぞれのデータを持つ最初の列の月または週数を確認する必要があり、2015年から3列目ですべての行の各年の合計数です。どんな助けもありがとうございます。

答えて

1

サブクエリが外部クエリのグループ化の月に関連していないため、年の合計カウントが表示されます。私は、クエリをこのように書くでしょう

SELECT MONTH(contact_time) AS `Date`, 
    SUM(YEAR(contact_time)=2014) AS `2014`, 
    SUM(YEAR(contact_time)=2015) AS `2015` 
FROM inquiries 
GROUP BY MONTH(contact_time) 

解説:COUNT()行の特定のセットのは、これらの行のための1のSUM()と同じです。そして、MySQLブール式は、の場合、整数1を返します。です。

+0

それは解決策でした。 – acatx

2

使用条件の集約:

SELECT MONTH(i.contact_time), 
     SUM(YEAR(i.contact_time) = 2014) as cnt_2014, 
     SUM(YEAR(i.contact_time) = 2015) as cnt_2015 
FROM inquiries i 
WHERE YEAR(i.contact_time) >= 2014 
GROUP BY MONTH(i.contact_time); 

あなたはcontact_timeにインデックスを持っている場合は、インデックスを利用することができますので、その後、条件where i.contact_time >= '2014-01-01'を使用しています。

関連する問題