gpt4 book ai didi

mysql - Ansi SQL 查询给出不合理的结果

转载 作者:行者123 更新时间:2023-11-29 11:00:08 25 4
gpt4 key购买 nike

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 放弃
6563461 6850345

当放弃计数与只能降低计数的附加条件相同的值时,为什么 all_addtocart 低于放弃。

这是在支持 ANSI SQL 的 AWS athena 上

最佳答案

您显然正在使用一个数据库产品,它会愉快地将谓词值隐式转换为可以COUNT编辑1的值,并且,如果Paul的假设是正确的,则它可以生成您列出的结果的唯一方法是,如果它同时 COUNTTRUEFALSE 结果,并且仅从其计数中排除UNKNOWN 值(有时称为 NULL,但在大多数产品中,这两个概念不会混为一谈)。

如果是这样,明显的解决方法是使用一些 CASE 表达式来确保当谓词计算结果为 TRUE 时,您仅计算 COUNT 结果。这将避免意外的隐式转换,从而给您带来误导性的结果:

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

这些 case 表达式确保我们只对 int 值执行 COUNT 操作,这些值要么是 1(如果谓词为 true ) 或 NULL

<小时/>

1我不愿意将任何执行此操作的产品描述为“ANSI”,但同样,几乎每个真正的数据库产品都不完全符合 ANSI。

关于mysql - Ansi SQL 查询给出不合理的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42410765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com