sql - 获取 GROUP BY 记录子集的计数

标签 sql sql-server count subquery

我有一个邮件分类帐表,我正在尝试查询它的返回百分比。我正在执行 GROUP BY 以根据 order_no、county 和 zip_code 获取唯一记录。

SELECT, COUNT(*) as TotalMailed, COUNT(*) (WHERE Returned = 1) as ReturnedMailed, Order_No, Zip_Code,County
FROM MailLedger
GROUP BY Order_No, Zip_Code, County

我正在获取每个记录分组的正确计数,但是我需要获取“Returned”设置为 true 的分组记录子集的计数。

我正在运行 SQL Server,因此我确实可以使用 OVER 和 PARTITION,但是,我也很想知道在 Postgres/MySQL 中处理它的正确方法。

最佳答案

在 SQL Server 中,您可以使用条件聚合。我通常使用 SUM(CASE . . . ) 来执行此操作:

SELECT COUNT(*) as TotalMailed,
       SUM(CASE WHEN Returned = 1 THEN 1 ELSE 0 END) as ReturnedMailed,
       Order_No, Zip_Code, County
FROM MailLedger
GROUP BY Order_No, Zip_Code, County;

如果Returned只接受1和0/NULL的值,那么你可以这样做:

SELECT COUNT(*) as TotalMailed,
       SUM(Returned) as ReturnedMailed,
       Order_No, Zip_Code, County
FROM MailLedger
GROUP BY Order_No, Zip_Code, County;

关于sql - 获取 GROUP BY 记录子集的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49020605/

相关文章:

python - 计算Python中列中具有相同值的行

sql - 如何检查与特定时间 SQL 重叠的日期时间

javascript - 如何在 node.js sequelize 中使用 varchar?

sql-server - 如果同时使用美元和括号符号,T-SQL 会出错

sql - 根据 ID 所在的行数从 SQL 查询中排除行

mysql - SQL使用COUNT(和GROUP BY?)在SELECT中执行计算而不排除记录

PHP 在文件中搜索字符串

sql - 我们应该如何命名或将 SQL 表从 Postgres 映射到 Node?

php - MySQL别名计算

sql - 如何使用 regexp_substr 拆分 oracle 中的单词?