我剛剛開始學習SQL,前幾天我正在處理一些基本示例。在這個例子中,我想找到我的朋友和隊友喜歡的訓練(根據我的朋友中有多少人喜歡訓練,有多少朋友完成了訓練,以及我的朋友在訓練中的平均評分)。到目前爲止,我使用子查詢爲每個訓練的每種加權值賦予一個加權值。我想總結每次訓練的加權值,每次訓練總數,然後按總數排序訓練列表,並從中選出前幾名。SQL:按組查詢的結果總計
這是我做的。
SELECT training_id, (5* COUNT()) AS [value]FROM progress
WHERE user_id IN (SELECT friend_id AS user_ids FROM friendships WHERE user_id=6 UNION SELECT user_id FROM membership WHERE team_id IN (SELECT team_id FROM membership WHERE user_id = 6))
AND completed = 1
GROUP BY training_id
UNION ALL
SELECT training_id, (10 * AVG(rating))
FROM reviews
WHERE user_id IN (SELECT friend_id AS user_ids FROM friendships WHERE user_id=6 UNION SELECT user_id FROM membership WHERE team_id IN (SELECT team_id FROM membership WHERE user_id = 6))
GROUP BY training_id
UNION ALL
SELECT training_id, COUNT()
FROM likes
WHERE user_id IN (SELECT friend_id AS user_ids FROM friendships WHERE user_id=6 UNION SELECT user_id FROM membership WHERE team_id IN (SELECT team_id FROM membership WHERE user_id = 6))
GROUP BY training_id
結果如下所示:
training_id value ______________________ 1 10 2 5 1 34.5 2 45 1 6 2 3
請讓我知道,如果你知道的方式做到這一點,或者如果有這種方法,我應該尋找一種替代方法。
(表「喜歡」「評論」和「進步」都包含字段「training_id」。你想想加入三個表開始與什麼?)
可能的字段名走前跑步 – Strawberry
你實際使用的數據庫是什麼?什麼是期望的輸出? –
爲什麼不使用SUM()函數來處理所有的值? –