我有一个邮件分类帐表,我正在尝试查询它的返回百分比。我正在执行 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/