假设我有一个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
的情况下执行此操作?
答案 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