2017-12-19 56 views
1

結果セットを四半期ごとの結果にグループ化しようとしています。これは私に次のようなデータを提供します...sqlクエリを四半期ごとの結果にグループ化する

SELECT DATE_FORMAT(post_date, '%b-%y') AS Month, SUM(views) AS Views 
FROM $table 
WHERE `property_id` = $property_id 
GROUP BY DATE_FORMAT(post_date, '%b-%y') 
ORDER BY `post_date` ASC 

:これまでのところ私は月によって見解を示し、このクエリを思い付くことができた

Month Views 
Jan-16 331 
Feb-16 390 
Mar-16 431 
Apr-16 430 
May-16 364 
Jun-16 360 
Jul-16 459 
Aug-16 356 
Sep-16 530 
Oct-16 435 
Nov-16 376 
Dec-16 362 

私は方法がわからないんだけどそれらをグループ化して、3ヵ月を含めて四半期終了時の見解と成果をカウントするようにします。たとえば、上記のデータを使用します。

​​

ありがとう、感謝します。

更新 これを解決するThorsten Kettnerに感謝します。

SELECT DATE_FORMAT(MAX(post_date), '%b-%y') AS Month, QUARTER(post_date), SUM(views) AS Views 
FROM $table 
WHERE property_id = $property_id 
GROUP BY YEAR(post_date), QUARTER(post_date) 
ORDER BY YEAR(post_date), QUARTER(post_date) 
+0

月の番号を取得し、3で除算し、結果でグループ化します。 – clinomaniac

答えて

2

四半期は月の数から整数の除算を計算することができます:

SELECT YEAR(post_date), (MONTH(post_date) - 1) DIV 3 + 1 as quarter, SUM(views) AS Views 
FROM $table 
WHERE property_id = $property_id 
GROUP BY YEAR(post_date), (MONTH(post_date) - 1) DIV 3 + 1 
ORDER BY YEAR(post_date), (MONTH(post_date) - 1) DIV 3 + 1; 
私はまた、次のように私は月 - 年の形式で必要な列を取得するために彼のソリューションに次に追加します

MハリドJunaidが言うように:このために機能QUARTERが存在する:

SELECT YEAR(post_date), QUARTER(post_date), SUM(views) AS Views 
FROM $table 
WHERE property_id = $property_id 
GROUP BY YEAR(post_date), QUARTER(post_date) 
ORDER BY YEAR(post_date), QUARTER(post_date); 
+1

@M Khalid Junaid:そうです。私はこの機能が存在することを知らなかった。 –

+0

ありがとうございました。私は 'DATE_FORMAT(post_date、 '%b-%y')AS Month 'をクエリの先頭に追加して、必要な列に追加しました。すべて今素晴らしいです:) – d1ch0t0my

+0

これは間違っています。四半期ごとに3ヶ月間があり、DBMSに選択することを知らせないので、MySQLは任意に選択します。これはSQL標準にも違反しているので、エラーが発生するはずです(実際には特定の設定でMySQLで動作します)。代わりに 'DATE_FORMAT(MAX(post_date)、 '%b-%y')AS Month'を' MAX(post_date) 'としてください。 –

関連する問題