我正在尝试在SQL中添加有条件的count语句,并且我一直收到错误。以下是我的代码:
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的计数,并且我一直收到错误。
答案 0 :(得分:3)
我会把它写成:
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()
很好)。你的问题是分母中缺少的问题。
答案 1 :(得分:0)
尝试这样的事情。
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)