SELECT
count(added_to_cart=1 ) AS all_addtocart,
count(added_to_cart =1 AND purchased IS NULL) AS abandonment
FROM emr_data
WHERE y='2017' AND m= '01'
ORDER BY count(*) DESC
此查询提供:
all_addtocart abandonment
6563461 6850345
如果放弃计算相同的值并使用只能降低计数的附加条件,all_addtocart如何低于放弃。
这是在AWS athena上支持ANSI SQL
答案 0 :(得分:1)
您显然正在使用数据库产品,该数据库产品可以将谓词值隐式转换为可以COUNT
ed 1 的值,如果Paul的假设是正确的,那么唯一的方法就是它可以生成您列出的结果,如果它COUNT
TRUE
和FALSE
结果{且}只排除其计数UNKNOWN
值(有时称为{{} 1}},但在大多数产品中,这两个概念并没有混合在一起。)
如果是这样,那么显而易见的解决方法是使用一些NULL
表达式,以确保在谓词评估为CASE
时只有COUNT
结果。这样可以避免意外的隐式转换,从而产生误导性结果:
TRUE
这些案例表达式确保我们只针对SELECT
count(CASE WHEN added_to_cart=1 THEN 1 END) AS all_addtocart,
count(CASE WHEN added_to_cart =1 AND purchased IS NULL THEN 1 END) AS abandonment
FROM emr_data
WHERE y='2017' AND m= '01'
ORDER BY count(*) DESC
值执行COUNT
,这些值为int
(如果谓词为真)或1
。< / p>
1 我会毫不犹豫地将任何产品描述为“ANSI”,但同样,几乎每个真正的数据库产品都不完全符合ANSI。