2013-08-29 45 views
2

我現在有2臺這樣組織的數據:SQL多個地方和領域

會議
meet_id
meet_category

訂單
ORDER_ID
meet_id
order_date的

我需要編寫一個查詢來返回會議總數,「long」類別的會議數量以及「short」類別的會議數量。 計數僅3月1日之後,至少有一個order_date的會議,2011年

輸出應該在3場和1個排

到目前爲止,我什麼我有是:

SELECT COUNT(m.meet_id), 
COUNT(SELECT m.meet_id WHERE m.meet_category = 'long'), 
COUNT(SELECT m.meet_id WHERE m.meet_category = 'short') 
FROM Meetings m 
INNER JOIN Orders o 
ON m.meet_id = o.meet_id 
WHERE o.order_date >= '2011-03-01'; 

這是首先想到的,但這個查詢不起作用,我甚至不知道我的方法是否正確。所有幫助讚賞!

回答

1

試試這個:

SELECT COUNT(m.meet_id), 
SUM(CASE WHEN m.meet_category = 'long' THEN 1 ELSE 0 END), 
SUM(CASE WHEN m.meet_category = 'short' THEN 1 ELSE 0 END) 
FROM Meetings m where meet_id in 
    (select meet_id 
    FROM Orders o 
    WHERE o.order_date >= '2011-03-01'); 
+0

This Works!非常感謝! – user2728555

+0

注意,此查詢僅適用於MySql,因爲meet_category不包含在group by子句中 –

0

,如果你只想要一個行試試這個

select count(1) as total_count,innerqry.* 

(
select count(m.meet_id), meet_catagory 
Meetings m 
INNER JOIN Orders o 
ON m.meet_id = o.meet_id 
and m.meet_id in 
(select meet_id from orders where order_date>= '2011-03-01') 

group by meet_category 
) innerqry 

和你幾個已知的會議類型試試這個

SELECT COUNT(m.meet_id), 
SUM(CASE WHEN m.meet_category = 'long' THEN 1 ELSE 0 END), 
SUM(CASE WHEN m.meet_category = 'short' THEN 1 ELSE 0 END) 
FROM Meetings m 
INNER JOIN Orders o 
ON m.meet_id = o.meet_id 
WHERE m.meet_id in 
(select meet_id from orders where order_date>'2011-03-01') 
0

試試這個:

SELECT COUNT(m.meet_id), 
(select count(*) from meetings m2 join orders o2 on o2.meet_id = m2.meet_id where m2.meet_category = 'long' and o2.order_date >= '2011-03-01'), 
(select count(*) from meetings m2 join orders o2 on o2.meet_id = m2.meet_id where m2.meet_category = 'short' and o2.order_date >= '2011-03-01') 
FROM mettings m 
INNER JOIN Orders o 
ON m.meet_id = o.meet_id 
WHERE o.order_date >= '2011-03-01'; 

您必須實現兩個獨立的子查詢,因爲您希望主查詢中沒有按照meet_id分組的總數,所以如果您嘗試在主查詢中將子查詢與字段關聯起來,則會出現有關按字段分組的錯誤。