在单个SQL查询中查找符合条件的行的比例

4
假设我有一个名为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个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接