查找在单个SQL查询中验证条件的行的比例

时间:2014-04-01 08:38:34

标签: sql count

假设我有一个sales表,如下所示:

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的情况下执行此操作?

1 个答案:

答案 0 :(得分:2)

您可以使用IF

执行此操作
SELECT SUM(IF(Price < 1, 1, 0))/COUNT(*) FROM sales

- 但它与CASE没有太大区别(你的逻辑是正确的)

您可能希望使用WHERE(仅合计价格&lt; 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