查找在单个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的情况下做到这一点?

最佳答案 你可以用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
点赞