我正在尝试在SQL中添加有条件的计数语句,但不断收到错误。下面是我的代码:
SELECT
(100.0*(COUNT(CASE [TYPE] WHEN 500 THEN 1 ELSE NULL END)) / (100*
(COUNT(CASE [TYPE] WHEN 400 THEN 1 ELSE NULL END + COUNT(CASE [TYPE] WHEN
300 THEN 1 ELSE NULL END))) AS Ratio
FROM historytable
基本上,我试图将活动类型 500 的计数百分比除以活动类型 400 和 300 的计数,但不断出现错误。
我会把它写成:
SELECT (sum(case when [type] = 500 then 100.0 else 0 end) /
sum(case when [type] in (300, 400) then 1 end)
) as ratio
FROM historytable;
我更喜欢sum()
count()
这种类型的计算(个人喜好,count()
很好(。 你的问题是分母中缺少一个参数。
尝试这样的事情。
SELECT (
100.0 *(
SELECT count( * )
FROM historytable
WHERE [type]=500
) / (
100 * (
(
SELECT count( * )
FROM historytable
WHERE [type]=400
) + (
SELECT count( * )
FROM historytable
WHERE [type]=300
)
)
)
) as ratio
使用 mysql 数据库,我能够在具有 [type] 和特定于该表的值的数据表上对此进行测试。
SELECT (
100.0 *(
SELECT count(*) FROM my_table WHERE record_type='value_1'
) / (
100 *(
(
SELECT count(*) FROM my_table WHERE record_type='value_2'
) + (
SELECT count( * ) FROM my_table WHERE record_type='value_3'
)
)
)
) as ratio;
+---------+
| ratio |
+---------+
| 1.61804 |
+---------+
1 row in
set (0.00 sec)