我有一個在Heroku上運行的Rails應用程序,我試圖計算用戶的排名(位置)到一個高分列表。多個左連接 - 如何?
該應用程序是用戶互相下注和可以開始下注(創建一個選擇)的地方,或者他們可以對已經創建的選擇(通過下注)進行下注。
我有以下的SQL應該給我一個基於他們在選擇和投注上的總獎金的用戶數組..但它給了我一些錯誤的總贏,我認爲問題是在左聯接,因爲如果我重寫SQL只包含要麼選擇或者下注表,然後我的工作就好了..
任何關於如何重寫SQL任何指針正常工作:)
SELECT users.id, sum(COALESCE(bets.profitloss, 0) + COALESCE(choices.profitloss, 0)) as total_pl
FROM users
LEFT JOIN bets ON bets.user_id = users.id
LEFT JOIN choices ON choices.user_id = users.id
GROUP BY users.id
ORDER BY total_pl DESC
結果:
+---------------+
| id | total_pl |
+---------------+
| 1 | 830 |
| 4 | 200 |
| 3 | 130 |
| 7 | -220 |
| 5 | -1360 |
| 6 | -4950 |
+---------------+
下面是我只連接到一個表的兩個SQL字符串,以及兩個結果。請參閱下面的總和與上面的結果不匹配。以下是正確的總和。
SELECT users.id, sum(COALESCE(bets.profitloss, 0)) as total_pl
FROM users
LEFT JOIN bets ON bets.user_id = users.id
GROUP BY users.id
ORDER BY total_pl DESC
SELECT users.id, sum(COALESCE(choices.profitloss, 0)) as total_pl
FROM users
LEFT JOIN choices ON choices.user_id = users.id
GROUP BY users.id
ORDER BY total_pl DESC
+---------------+
| id | total_pl |
+---------------+
| 3 | 170 |
| 1 | 150 |
| 4 | 100 |
| 5 | 80 |
| 7 | 20 |
| 6 | -30 |
+---------------+
+---------------+
| id | total_pl |
+---------------+
| 1 | 20 |
| 4 | 0 |
| 3 | -10 |
| 7 | -30 |
| 5 | -110 |
| 6 | -360 |
+---------------+
這正是我需要的..非常感謝:) – Twiddr