[英]Mysql optimization, muliple select to single select
我有一個表,我需要在其中選擇一個周期總計的MAX(SUM(total))。
SELECT SUM(P.amount) as total FROM bank P WHERE P.ReceivedDate >= '2008-07-28' AND P.ReceivedDate <= '2008-08-31';
SELECT SUM(P.amount) as total FROM bank P WHERE P.ReceivedDate >= '2008-09-01' AND P.ReceivedDate <= '2008-09-28';
SELECT SUM(P.amount) as total FROM bank P WHERE P.ReceivedDate >= '2008-09-29' AND P.ReceivedDate <= '2008-10-26';
我已經運行了上述查詢,並在php中找到了最高的總數。
我不確定如何按此查詢分組。
我期望一個查詢將所有查詢替換為MAX(SUM(total))。
請幫幫我。
您可以嘗試類似
SELECT TOP 1
CASE
WHEN P.ReceivedDate BETWEEN '2008-07-28' AND '2008-08-31' THEN 1
WHEN P.ReceivedDate BETWEEN '2008-09-01' AND '2008-09-28' THEN 2
WHEN P.ReceivedDate BETWEEN '2008-09-29' AND '2008-10-26' THEN 3
END,
SUM(P.amount) Total
FROM bank p
GROUP BY CASE
WHEN P.ReceivedDate BETWEEN '2008-07-28' AND '2008-08-31' THEN 1
WHEN P.ReceivedDate BETWEEN '2008-09-01' AND '2008-09-28' THEN 2
WHEN P.ReceivedDate BETWEEN '2008-09-29' AND '2008-10-26' THEN 3
END
HAVING CASE
WHEN P.ReceivedDate BETWEEN '2008-07-28' AND '2008-08-31' THEN 1
WHEN P.ReceivedDate BETWEEN '2008-09-01' AND '2008-09-28' THEN 2
WHEN P.ReceivedDate BETWEEN '2008-09-29' AND '2008-10-26' THEN 3
END IS NOT NULL
ORDER BY Total DESC
或更短的版本
SELECT TOP 1
SUM(amount) Total
FROM (
SELECT CASE
WHEN P.ReceivedDate BETWEEN '2008-07-28' AND '2008-08-31' THEN 1
WHEN P.ReceivedDate BETWEEN '2008-09-01' AND '2008-09-28' THEN 2
WHEN P.ReceivedDate BETWEEN '2008-09-29' AND '2008-10-26' THEN 3
END GroupVal,
P.amount
FROM bank P
) Vals
GROUP BY Vals.GroupVal
HAVING Vals.GroupVal IS NOT NULL
ORDER BY Total DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.