2013-02-07 49 views

回答

2

我認爲這應該適合你。它將在一個SQL語句返回3個計數:

SELECT SUM(CASE WHEN inventory <= 5 AND cat_id = 1 THEN 1 ELSE 0 END) Q1Result, 
    SUM(CASE WHEN inventory BETWEEN 5 AND 10 AND cat_id = 1 THEN 1 ELSE 0 END) Q2Result, 
    SUM(CASE WHEN inventory > 10 THEN 1 ELSE 0 END) Q3Result 
FROM products 

這裏是SQL Fiddle

祝你好運。

+0

+1,它將確保OP得到來自每個查詢的結果。 。 。迄今爲止最好的解決方案。 –

+0

謝謝你sdesdes!它像一個魅力! – php99

0

你可以使用:

select sum(x) from query 1 union query 2 etc 
1
SELECT COUNT(prod_id) FROM products WHERE inventory <= 5 AND cat_id = 1 
UNION ALL 
SELECT COUNT(prod_id) FROM products WHERE inventory BETWEEN 5 AND 10 AND cat_id = 1 
UNION ALL 
SELECT COUNT(prod_id) FROM products WHERE inventory > 10 

你會得到所有在一個大長從後面的查詢多行名單。

+0

當然你不想使用'UNION ALL'?您還需要在第一個語句中對列進行別名。 – Kermit

+0

UNION ALL也會起作用。這可能會更快 - 只要他可以確定所有數據id DISTINCT已經存在(除非對他無關緊要)。 – mrunion

+0

我建議將您的答案更改爲使用'UNION ALL',因爲1)它是更快2)如果它們不是'DISTINCT' – Kermit

0

試試這個

DEMO

SELECT (
    SELECT COUNT(prod_id) FROM products WHERE inventory <= 5 AND cat_id = 1 
    ) AS count1, 
    (
    SELECT COUNT(prod_id) FROM products WHERE inventory BETWEEN 5 AND 10 AND cat_id = 1 
    ) AS count2, 
    (
    SELECT COUNT(prod_id) FROM products WHERE inventory > 10 
    ) AS count3 
+0

我這樣做,但它是3個子查詢,並且必須有一種方法可以將它放入1個查詢中。但是,謝謝你的回答。 SQL小提琴真酷! – php99

相關問題