对于表中的行数,将重复以下查询的输出。任何人都可以解释为什么以及是否使用“限制1”解决此问题的好习惯吗?
SELECT
CAST((SELECT COUNT(event_id)
FROM creation_funnel
WHERE Ds = 2018-10-01 AND action = "publish") AS float) /
CAST((SELECT COUNT(DISTINCT event_id)
FROM creation_funnel
WHERE Ds = 2018-10-01) AS float)
* 100.0
FROM creation_funnel;
答案 0 :(得分:2)
此查询将是有条件聚合的理想选择,因为它使您可以摆脱两个子查询。尝试以下方法:
SELECT
COUNT(CASE WHEN Ds = '2018-10-01' AND action = 'publish' THEN event_id END) /
COUNT(DISTINCT CASE WHEN Ds = '2018-10-01' THEN event_id END) * 100 AS percent_published
FROM creation_funnel
请注意,日期字符串需要用引号引起来,如@Strawberry指出,2018-10-01被解释为整数表达式,计算结果为2007。
与查询相比,该查询还将只为您提供一个结果,这将为表中的每一行提供一个结果。删除FROM
子句或添加LIMIT 1
都可以解决此问题,但是使用条件聚合是更好的选择。
答案 1 :(得分:-2)
SELECT
CAST((SELECT COUNT(event_id) FROM creation_funnel WHERE Ds = '2018-10-01' AND action = "publish") AS float) /
CAST((SELECT COUNT(DISTINCT event_id) FROM creation_funnel WHERE Ds = '2018-10-01') AS float) * 100.0
重复是因为语句的FROM部分。去掉它。 您正在获得多个结果,因为正在为表中的每个记录运行选择。
已更新
根据尼克的说法。您可以简化他对以下内容的回答。
SELECT
COUNT(CASE WHEN action = 'publish' THEN event_id ELSE 0 END) /
COUNT(DISTINCT event_id) * 100 AS percent_published
FROM creation_funnel
WHERE Ds = '2018-10-01';