如何在SQLite中同时统计分组总行数与特定条件行数?
解决SQLite分组统计总行数与条件行数的问题
你可以通过条件聚合函数实现一次性统计每个pst_id的总行数和clicked_at非空的行数,以下是两种可行的写法:
方法一:使用COUNT结合CASE表达式
SELECT pst_id, COUNT(*) AS total_rows, COUNT(CASE WHEN clicked_at != '' THEN 1 END) AS non_empty_clicked_rows FROM consolidated_results GROUP BY pst_id;
方法二:使用SUM结合CASE表达式
SELECT pst_id, COUNT(*) AS total_rows, SUM(CASE WHEN clicked_at != '' THEN 1 ELSE 0 END) AS non_empty_clicked_rows FROM consolidated_results GROUP BY pst_id;
原理说明
COUNT(*):直接统计每个分组内的所有行数,不受字段值影响。COUNT(CASE WHEN ... THEN 1 END):当clicked_at非空时返回1,否则返回NULL;COUNT函数会自动忽略NULL值,最终得到满足条件的行数。SUM(CASE WHEN ... THEN 1 ELSE 0 END):满足条件时累加1,不满足时累加0,求和结果即为符合条件的行数。
你之前的写法错误在于将WHERE子句直接嵌套在聚合函数中,这不符合SQL语法规范,必须通过条件表达式配合聚合函数来实现条件统计。
内容的提问来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

