簡體   English   中英

SQL請求,子選擇的總和,按月分組

[英]SQL request, Sum of a subselect to group by month

我有3張桌子。 為了使它更容易理解,我將其轉換為簡單的內容,例如不同體育活動的時間表。

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和班級的唯一鍵。 我知道,在此表中不需要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 |
+----+---------+----------+--------------+

我正在嘗試對一些統計數據進行排序。 我試圖找到每個月參加一項特定運動的人數。

有了這個請求,我嘗試找到參加拳擊課的人數:

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等,它還會顯示該月的約會總和。

我嘗試按月分組,但它沒有廣告約會的數量,只是顯示了最后一個...

有任何想法嗎 ?

這是我嘗試的SQL小提琴http://sqlfiddle.com/#!9/733782/1

我也嘗試將選擇內容包裝在SUM中,但仍然似乎不起作用: http : //sqlfiddle.com/#!9/2ae510/1

我是從php / sql開始的,如果這個問題看起來很蠢,對不起。

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)

您實際上可以在子查詢周圍包裝“ 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 ??)

好的,最后它通過包裹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

謝謝 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM