PostgreSQL FILTER
PostgreSQL FILTER
SELECT user_id,
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'paid') AS paid_cnt,
SUM(amount) FILTER (WHERE status = 'paid') AS paid_amount
FROM orders
GROUP BY user_id;MySQL 等价写法
MySQL 等价写法
SELECT user_id,
COUNT(*) AS total,
SUM(status = 'paid') AS paid_cnt,
SUM(CASE WHEN status = 'paid' THEN amount ELSE 0 END) AS paid_amount
FROM orders
GROUP BY user_id;| PG | 聚合 FILTER 子句,语义清晰 |
|---|---|
| MySQL | 无 FILTER,用 CASE 或布尔求和 |
| 用途 | 一份数据多个口径的条件统计 |