因此,假設我有一個連接用戶的團隊/關係表,用戶可以加入的團隊以及團隊參與的挑戰(teams_users_challenges
)以及存儲所有輸入數據的表用戶在給定的挑戰(entry_data
)。我想獲得挑戰中每個用戶的平均分數(每週給定一週的平均值)。但是,用戶有可能以某種方式錯誤地加入多個團隊(這不應該發生,但有時會發生)。下面是SQL查詢低於獲取特定用戶的分數:在忽略重複項的情況下加入表格
SELECT tuc.user_id, SUM(ed.data_value)/7 as value
FROM teams_users_challenges tuc
LEFT JOIN entry_data ed ON (
tuc.user_id = ed.user_id AND
ed.entry_date BETWEEN '2013-09-16' AND '2013-09-22'
)
WHERE tuc.challenge_id = ___
AND tuc.user_id = ___
如果用戶錯誤地加入了多個團隊,他(她)將有更多比teams_users_challenges
一個條目,這基本上是複製數據檢索。因此,如果一個用戶在同一個挑戰中有3個不同的團隊,他將在teams_users_challenges
中有3個條目,這將使他們的平均值value
乘以3,這要歸功於自動獲取所有記錄的LEFT JOIN
,而不僅僅是一個。
我試過使用GROUP BY
,但這似乎並沒有將數據限制在teams_users_challenges
中只有一個實例。有沒有人有任何想法,我可以如何限制查詢只在teams_users_challenges
內取得一個記錄?
附錄:內teams_users_challenges
的列是team_id
,user_id
,和challenge_id
。
加入與使用'GROUP BY'或'選擇DISTINCT'子查詢。 – Barmar