我有3個表。爲了讓它更容易理解,我把它轉換成了一些簡單的東西,比如不同體育活動的時間表。SQL請求,子查詢的總和按月分組
1. 第一個表「體育」是不同的運動。 它包含了這項運動的ID和名稱。
Table "sports"
+----+-------+
| id | Sport |
+----+-------+
| 1 | Judo |
+----+-------+
| 2 | Boxe |
+----+-------+
2. 第二個表「類」是指實際發生的不同的類。每門課都與體育和日期有關。 它包含ID,課程的日期,它與之相關的運動的ID,以及一個獨特的ID,使其獨特,結合日期和體育ID。
table "classes"
+----+----------+------------+--------------+
| id | id_sport | dates | unique_key |
+----+----------+------------+--------------+
| 1 | 1 | 2017-03-10 | 1_2017-03-10 |
+----+----------+------------+--------------+
| 2 | 2 | 2017-03-10 | 2_2017-03-10 |
+----+----------+------------+--------------+
| 3 | 2 | 2017-03-17 | 2_2017-03-17 |
+----+----------+------------+--------------+
3. 第三個表 「約會」 收集每一個存在。 它包含來的人的姓名,運動的身份證明以及班級的唯一關鍵字。我知道,在這張表中,列id_sport不是必需的,因爲我們可以在表類中找到它。
Table "appointments"
+----+---------+----------+--------------+
| id | student | id_sport | id_class |
+----+---------+----------+--------------+
| 1 | Tom | 1 | 1_2017-03-10 |
+----+---------+----------+--------------+
| 2 | Sam | 1 | 1_2017-03-10 |
+----+---------+----------+--------------+
| 3 | Mat | 2 | 2_2017-03-10 |
+----+---------+----------+--------------+
| 4 | Mat | 2 | 2_2017-03-17 |
+----+---------+----------+--------------+
| 5 | Tom | 2 | 2_2017-03-10 |
+----+---------+----------+--------------+
我想排序一些統計數據。我試圖找出每個月出席特定運動的人數。
有了這個要求,我試圖找到出現在boxe類的人數:
SELECT
MONTH(classes.dates) AS Month,
(SELECT count(*)
FROM appointments
WHERE appointments.id_sport = sports.id AND appointments.id_class =
classes.unique_key AND sports.id = 2 LIMIT 1) AS nb_appointment
FROM sports
INNER JOIN classes ON classes.id_sport = sports.id
WHERE sports.id = 2
ORDER BY Month
這樣做的結果是
+-------+---------------+
| Month | nb_appointment|
+-------+---------------+
| 3 | 2 |
+-------+---------------+
| 3 | 1 |
+-------+---------------+
我想是的總和爲:月3 => nb_appointment 3
如果我還有一些月4,5等,它也會顯示這些月的任命總和。
我集團tryed的一個月,但它並任命沒有廣告的數量,只顯示最後...
任何想法?
這裏是我的嘗試 http://sqlfiddle.com/#!9/733782/1
我也試過包裝選擇在SUM的sql小提琴,但仍然不似乎工作:http://sqlfiddle.com/#!9/2ae510/1
我開始在PHP/SQL,對不起,如果這個問題似乎愚蠢。
我想你既然選擇了sport_id = 2,你必須得到nb_appointment 3而不是5吧? – sia