2017-03-11 14 views
0

colorsという名前のテーブルが1つあり、他のテーブルの日付に基づいて毎年固有の色の数が返されるクエリを作成する必要があります。programs それは次のようになります。私はこれを試してみました結合テーブルから年単位でデータを照会

colors 
+----+----------+ 
| id | name | 
+----+----------+ 
| 1 | blue  | 
| 2 | yellow | 
+----+----------+ 

programs 
+----+------------+ 
| id | date | 
+----+------------+ 
| 1 | 2016-01-08 | 
| 2 | 2016-02-08 | 
| 3 | 2017-02-08 | 
+----+------------+ 

programs_colors 
+------------+----------+ 
| program_id | color_id | 
+------------+----------+ 
|   1 |  1 | 
|   1 |  1 | 
|   2 |  2 | 
|   2 |  1 | 
|   3 |  1 | 
|   3 |  1 | 
+------------+----------+ 

SELECT min(date), count(*) FROM (
    SELECT min(date) AS date FROM programs_colors INNER JOIN programs ON programs.id = program_id GROUP BY color_id 
) AS a GROUP BY year(date) 

min(date):  count(*): 
2016-01-08  2 
2017-01-08  0 

しかし、全体としての私の色上記のクエリグループが、私は彼らが予想される毎年

でグループ化された必要結果:

min(date):  count(*): 
2016-01-08  2 
2017-01-08  1 

私の質問が意味をなさないことを願って

答えて

1
SELECT min(date), count(distinct color_id) 
FROM programs_colors 
INNER JOIN programs 
ON  programs.id = program_id 
GROUP BY year(date); 
ような何かをする必要がある場合があります
1

私は右理解していれば、あなたはこの

SELECT min(date), sum(count) FROM (
    SELECT min(date) AS date, count(*) as count FROM programs_colors INNER JOIN programs ON programs.id = program_id GROUP BY color_id 
) AS a GROUP BY year(date) 
関連する問題