2012-10-16 56 views
1

是否有可能做一個查詢用做幾聚集在一個查詢的WHERE子句SQL

我知道磨片可以用

SELECT SUM(value) FROM mytable WHERE date between '2012-05-01' AND '2012-06-01' 

我一直在試圖做出了榜樣裏面幾個聚集函數

CREATE TABLE mytable 
    (id varchar(10), value int, `date` date, situation varchar(10)) ; 

INSERT INTO mytable 
    (id, value, date, situation) 
VALUES 
    ('id0', 1338, '2012-05-14','Urgent'), 
    ('id0', 3572, '2012-05-13','Urgent'), 
    ('id0', 3232, '2012-05-06','Urgent'), 
    ('id0', 3068, '2012-05-05','Post'), 
    ('id0', 3363, '2012-05-04','Urgent'), 
    ('id0', 2022, '2012-04-28','Anual'), 
    ('id0', 3193, '2012-04-24','Post') 

但是有可能使用相同的查詢來獲得其他聚合值嗎?的

SELECT SUM(value),SUM(value),Count(*) FROM mytable WHERE date between '2012-05-01' AND '2012-06-01', WHERE date between '2012-05-01' AND '2012-10-01', Where situation like 'Urgent' 

,而不是3查詢:

SELECT SUM(value) FROM mytable WHERE date between '2012-05-01' AND '2012-06-01' 
SELECT SUM(value) FROM mytable WHERE date between '2012-05-01' AND '2012-10-01' 
SELECT Count(*) FROM mytable Where situation like 'Urgent' 
+0

你真的是指'2012-05-01'和'2012-10-01''之間的日期嗎?或者你的意思是'date> ='2012-05-01'和日期<'2012-10-01''?在第一版中,2012-10-01包含在計算中。第二,事實並非如此。 (如果你使用'datetime'而不是'date',那麼第一個版本的含義會不同。) –

回答

3

使用情況

select 
    sum(case when date between '2012-05-01' AND '2012-06-01' then value else 0 end) as sum1, 
    sum(case when date between '2012-05-01' AND '2012-10-01' then value else 0 end) as sum2, 
    sum(case when situation like 'Urgent' then 1 else 0 end) as count1 
from mytable 
1

可以

SELECT 
SUM(CASE WHEN date between '2012-05-01' AND '2012-06-01' THEN value ELSE 0 END) 
as sum1, 
SUM(CASE WHEN date between '2012-05-01' AND '2012-10-01' THEN value ELSE 0 END) 
as sum2, 
COUNT(CASE WHEN situation like 'Urgent%' THEN 1 ELSE 0 END) 
as cnt1 
FROM mytable Where situation like 'Urgent%' OR date between '2012-05-01' AND '2012-10-01' 

我猜你喜歡錯過%:like 'Urgent%',不like 'Urgent'