2014-04-01 48 views
4

假設我有一個sales表,該表如下驗證狀態的比例:查找排在單個SQL查詢

ID |  Price 
---------------------- 
1    0.33     
2    1.5    
3    0.5     
4    10     
5    0.99  

我想找到,在一個單一的查詢,行的比例確認給定的條件。例如,如果條件是Price < 1,結果應該是3/5 = 0.6。

,我迄今發現的唯一的解決方法是:

SELECT 
    SUM(
     CASE 
      WHEN Price < 1 
      THEN 1 
      WHEN Price >= 1 
      THEN 0 
      END 
     )/COUNT(*) 
FROM sales 

但有沒有辦法做到這一點不CASE

回答

2

你可以用IF做到這一點:

SELECT SUM(IF(Price < 1, 1, 0))/COUNT(*) FROM sales 

- 但它是從CASE沒有大的區別(你的邏輯在這裏是正確的)

您可能需要使用WHERE(總結只有價格< 1 ) - 但由於您使用的是COUNT總數,因此您的情況無效。另一種選擇:分別獲得總計數:

SELECT 
    COUNT(sales.Price)/total_count 
FROM 
    sales 
    CROSS JOIN (SELECT COUNt(*) AS total_count FROM sales) AS c 
WHERE 
-- you're summing 1 or 0 depending of Price, so your sum is 
-- just count where Price<1 
    sales.Price<1