假设我有一个销售表,如下所示:
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