我有一個表像這些列:SQL查詢:SUM上三列,標準
idx | amount | usercol1 | usercol2 | usercol3 | percentage1 | percentage2 | percentage3
數據通常是這樣的:
0 | 1500 | 1 | null | null | 100 | null | null
1 | 3000 | 2 | 3 | null | 50 | 50 | null
我想作一個SUM()每個用戶的金額。
實施例:
- USER1 = 1500 * 100/100(量* usercol1/100)
- USER2 = 3000 * 50/100(量* usercol1/100)
- 用戶3 = 3000 * 50/100(金額* usercol2/100)
我試過UNION無濟於事(沒有總結SUM)。
有沒有辦法做到這一點?問題在於它應該使用GROUP BY用戶名(我使用LEFT OUTER JOIN用戶名開啓exampletable.usercol1 = usernames.idx)。
我知道這是非標準的,並會從另一個表的關係更好。但我不允許改變表格結構。
很多很多很多謝謝! :=)
在此,給出一個錯誤的結果的一個例子(似乎給從查詢結果僅在中間)
(
SELECT SUM(projects.amount * (projects.percentage1/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol1=entities.idx
WHERE projects.usercol1=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
UNION ALL
(
SELECT SUM(projects.amount * (projects.percentage2/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol2=entities.idx
WHERE projects.usercol2=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
UNION ALL
(
SELECT SUM(projects.amount * (projects.percentage3/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol3=entities.idx
WHERE projects.usercol3=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
ORDER BY totalproj DESC
LIMIT 10
無法理解的問題:我無法理解在「示例」下給出的工作。 usercol1是各種各樣的1或2,從來沒有100.另外,usercol1如何對應於用戶1和用戶2,但usercol2對應於用戶3? – Hammerite 2010-09-14 16:58:18