2016-01-19 35 views
0

我一直在嘗試不同的組合,但我似乎無法得到這個工作。我有內部連接表,我想統計在記錄中發現的QA ISSUE的數量,並且只輸出QA ISSUE的那些記錄,我該怎麼做?count子句輸出數據庫中的所有記錄 - mysql

SELECT d.department, m.mo_number, m.part_number, c.category, 
COUNT(CASE WHEN c.category = 'QA ISSUE' THEN category END) as qa_issue, 
SUM(CASE WHEN c.category = 'QA ISSUE' THEN time_spent END) as time_spent 
FROM  master as m 
INNER JOIN category as c ON c.cat_id = m.cat_id 
INNER JOIN department as d ON d.dept_id = m.dept_id 
WHERE m.date_created >= DATE_SUB(now(), INTERVAL 50 DAY) AND 
d.department = 'Electronics' 
GROUP BY m.mo_number 
ORDER BY 1 
+0

您是否可以提供一些示例源數據,預期輸出以及運行查詢時獲得的輸出結果? – Shadow

+0

爲什麼不把'c.category ='QA ISSUE''放在'WHERE'而不是'COUNT'和'SUM'? –

+0

我想統計每個部門的所有QA ISSUE記錄以及所有QA ISSUE值的總和,作爲time_spent。 – Brume007

回答

0

要按聚合篩選結果,請使用GROUP BY子句後面出現的HAVING子句。請注意,這不是WHERE子句(它選擇要聚合的行)的替代品。

SELECT 
     d.department 
    , m.mo_number 
    , m.part_number 
    , c.category 
    , COUNT(*) AS qa_issue 
    , SUM(time_spent) AS time_spent 
FROM master AS m 
     INNER JOIN category AS c ON c.cat_id = m.cat_id 
     INNER JOIN department AS d ON d.dept_id = m.dept_id 
WHERE m.date_created >= DATE_SUB(now(), INTERVAL 50 DAY) 
     AND d.department = 'Electronics' 
     AND c.category = 'QA ISSUE' 
GROUP BY 
     d.department 
    , m.mo_number 
    , m.part_number 
    , c.category 

HAVING COUNT(*) = 1 

ORDER BY 
     d.department 

我還增加了一個條件,where子句,並添加所有的非聚集列到GROUP BY子句 - 我建議你總是這樣。

+0

謝謝您的回覆。如果我不清楚我的問題,我的道歉。你的查詢在某種程度上起作用,即它取得2條記錄,但總和應該是記錄1 +記錄2(sum(time_spent)= record1 + record2)的總和,其值在time_spent列中。結果集只是一個列表而不是2個值的總和當我剛剛得到2條記錄的列表時,Count應該給我2的值,那是我最初得到的結果,我不知道如何去做這件事 – Brume007

+0

用DATA做它。不要嘗試用文字描述需求,使用**示例**並將其添加到您的問題中,以便於閱讀。閱讀前面提供的URL,如果您的問題已做好準備,您將獲得更快的解決方案。 –

相關問題