我有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