我有三张桌子。为了让它更容易理解,我把它转换成了一些简单的东西,比如不同体育活动的时间表。
Table "sports"
+----+-------+
| id | Sport |
+----+-------+
| 1 | Judo |
+----+-------+
| 2 | Boxe |
+----+-------+第二个表“”是实际发生的不同类。每一节课都与一项运动和一次约会有关。它包含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 |
+----+----------+------------+--------------+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 |
+-------+---------------+我需要的是: Month 3 => nb_appointment 3的总和
如果我也有一些月4,5等,它也会显示这些月份的预约总数。
我试着按月分组,但它没有广告预约数量,只是显示最后一次…
有什么想法吗?
下面是我尝试过的http://sqlfiddle.com/#!9/733782/1中的sql
我还尝试了将select封装在一个SUM中,但似乎仍然不起作用:http://sqlfiddle.com/#!9/2ae510/1
我从php/sql开始,如果这个问题看起来很愚蠢,很抱歉。
发布于 2017-09-02 00:58:25
select count(distinct student) , Month(c.dates)
from appointment a
inner join classes c
on a.id_class = c.unique_key
where c.id_sports = 2
group by Month(c.date)发布于 2017-09-02 00:29:09
实际上,您可以用子查询包装一个"SUM“:
SELECT
MONTH(classes.dates) AS Month,
SUM(
(SELECT count(*)
FROM appointment
WHERE appointment.id_sport = sports.id
AND appointment.id_classes = 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这给出了答案3(你的帖子说你期望nb_appointments是5,但我认为它是3?)
发布于 2017-09-02 01:45:41
好的,最后它的工作方式是包装一个sum()并添加一个group by,如下所示:
SELECT
MONTH(classes.dates) AS Month,
SUM(
(SELECT count(*)
FROM appointment
WHERE appointment.id_sport = sports.id AND appointment.id_classes =
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
GROUP BY Month
ORDER BY Month谢谢!
https://stackoverflow.com/questions/46004323
复制相似问题