[英]MySQL SubQueries for multiple SUMs
如果我需要在相似的WHERE條件下獲得5個以上的不同SUM值,那么通過一個包含五個子查詢的查詢的最佳方法(也許是唯一的方法)嗎? 例如,我的查詢是:
SELECT user,
(SELECT SUM(amount) FROM table t, table2 t2 WHERE t.table2_id = t2.id AND table2.type = 1 AND user = 1 AND date = x) AS one,
(SELECT SUM(amount) FROM table t, table2 t2 WHERE t.table2_id = t2.id AND table2.type = 2 AND user = 1 AND date = x) AS two,
(SELECT SUM(amount) FROM table t, table2 t2 WHERE t.table2_id = t2.id AND table2.type = 3 AND user = 1 AND date = x) AS three,
(SELECT SUM(amount) FROM table t, table2 t2 WHERE t.table2_id = t2.id AND table2.type = 4 AND user = 1 AND date = x) AS four,
(SELECT SUM(amount) FROM table t, table2 t2 WHERE t.table2_id = t2.id AND table2.type = 5 AND user = 1 AND date = x) AS five
FROM table
WHERE user = 1
到目前為止,我的查詢速度非常快,但是當有更多記錄時,我擔心五個以上子查詢的含義。
出於好奇,與五個子查詢相比,具有五個子查詢的這樣一個查詢在性能上是否具有優勢/劣勢? 我以為它會更快,因為它只是一次數據庫之旅,而不是5次?
編輯:有大約60條記錄的表2,用於對表1中的數千條記錄進行分類。表2中的每條記錄按類型值1-5進行分類(這是我用來對項目進行分組的值)我想要的總和。
您只需要一個查詢即可獲得每種類型的總和:
SELECT
t2.type,
SUM(t.amount)
FROM
table t
INNER JOIN
table2 t2
ON
t.table2_id = t2.id
AND
t.user = 1
AND
t.date = x
GROUP BY
t2.type
好。 如果這僅適用於一個用戶,而您並不需要絕對按此順序...。您可以這樣做。
select user, type, sum(amount)
where user = 1
and date = x
and type between (1,5)
group by user, type
這會給你
1,1,sum
1,2,sum
1,3,sum
1,4,sum
1,5,sum
代替
1,sum1,sum2,sum3,sum4,sum5
對於您懷疑的所有需求,這應該足夠好了,而不會造成任何麻煩。
改寫:
SELECT t.user,
SUM(CASE table2.type WHEN 1 then amount else 0 end) As one,
SUM(CASE table2.type WHEN 2 then amount else 0 end) As two,
SUM(CASE table2.type WHEN 3 then amount else 0 end) As three,
SUM(CASE table2.type WHEN 4 then amount else 0 end) As four,
SUM(CASE table2.type WHEN 5 then amount else 0 end) As five
FROM table t
INNER JOIN table2 t2 ON t.table2_id = t2.id
WHERE t.user = 1
AND table2.type in (1,2,3,4,5)
我了解您的查詢是偽查詢,但是它有一個懸掛的WHERE user
沒有FROM
子句。 至於性能,上面的內容一口氣通過了表格。 5x子查詢形式將進行5次傳遞,但如果有適當的索引可用,則不應慢很多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.