2014-01-30 42 views
1

我有以下模式http://sqlfiddle.com/#!2/1241f9/9篩選查詢結果在GROUP BY與condional數

第一個查詢顯示數據的整個集合我從表中收集。

我所要做的是創建一個測試,以檢查但是網站上的產品,我希望它是動態的顯示,因爲當我們運行一個測試一個產品可能不再可用

做此予想找出哪些parent_id具有多於3 child_id的,具有至少一個child_id其中qty> 0,具有至少一個child_id其中qty = 0和wh_soh> 0且具有至少一個child_id其中兩個qtywh_soh = 0.

the SE 3個條件表示3個狀態的child_id可以是

  • 在庫存(qty> 0)
  • 脫銷,但可以從倉庫(qty = 0和wh_soh> 0)
  • 完全脫離再供給的股票(qtywh_soh = 0)

,這樣我獲得所有S中的parent_id「具有3個或更多child_id s」的餘可以篩選結果(第二查詢),下一步就是做類似COUNT(WHERE qty = 0 AND wh_soh = 0)的事情,但是當我google的時候,我一直在找一組計數唯一值的結果。

那麼我怎麼能做我的查詢條件計數ie。 COUNT(WHERE qty = 0 AND wh_soh = 0)

回答

1

嘗試此查詢,您可以通過使用SUM(條件),如下面

SELECT p.parent_id, 
     COUNT(*) as children, 
     SUM(c.qty > 0) as in_stock, 
     SUM(c.qty = 0 AND c.wh_soh > 0) as warehouse, 
     SUM(c.qty = 0 AND c.wh_soh = 0) as out_of_stock 
FROM test_parent p 
INNER JOIN test_relation r USING (parent_id) 
INNER JOIN test_child c USING (child_id) 
GROUP BY p.parent_id 
HAVING children > 3 
    AND in_stock > 0 
    AND warehouse > 0 
    AND out_of_stock > 0 

sqlFiddle

1

試試這個數的條件:

SELECT a.parent_id, a.url 
FROM (SELECT tr.parent_id, tp.url, tr.child_id, 
      (CASE WHEN tc.qty > 0 THEN 1 WHEN tc.qty = 0 AND tc.wh_soh > 0 THEN 2 WHEN tc.qty = 0 AND tc.wh_soh = 0 THEN 3 END) AS test 
     FROM test_relation AS tr 
     INNER JOIN test_parent AS tp ON tr.parent_id = tp.parent_id 
     INNER JOIN test_child AS tc ON tc.child_id = tr.child_id 
    ) AS a 
GROUP BY a.parent_id HAVING COUNT(DISTINCT child_id) >=3 AND COUNT(DISTINCT test) >= 3; 

檢查此鏈接SQL FIDDLE DEMO

OUTPUT

| PARENT_ID | URL | 
|-----------|-------| 
|   5 | url_e | 
|  11 | url_k |