【发布时间】:2020-09-07 13:16:15
【问题描述】:
我有一个包含 191 个值的列表,我想与一列进行比较。我最终想要获得在我的主列表 (matches/(non-matches + NULL)) 中有值的行的计数。
我知道我可以执行以下操作,但我想知道这是否是最有效的方法?是否可以创建一个存储值的数组并对此进行检查?不确定best practice 的执行方式是什么,我有 191 个值要检查?
我希望避免将 191 csv 放入参数中,因为这会影响格式化/可读性。有没有办法将这些值存储在数组或临时表中,这样我就可以将一个速记变量放入实际查询中?还是不管有多少值要检查,使用下面的方法/平均方法仍然是最好的方法?
SELECT
SUM(CASE WHEN COALESCE(field, '') IN (COMMA SEPARATED VALUES) THEN 1 ELSE 0 END) as matches,
COUNT(COALESCE(field)) as total_rows
FROM table
另外,我相信 COUNT(*) 和 COUNT(1) 对 NULL 字段视而不见,所以任何人都可以确认使用 COUNT(COALESCE(FIELD)) 是否确保计数包括字段中的空值? p>
【问题讨论】:
标签: sql group-by count average presto