2014-04-01 45 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