



























这是一个创建于 859 天前的主题,其中的信息可能已经有所发展或是发生改变。
现在有 2 张表:student 和 transactions
student 长这样:
| id | name |
|---|---|
| 1 | a |
| 2 | b |
| 3 | c |
transactions
| id | student_id | updated_at |
|---|---|---|
| 1 | 1 | 2024-02-06T16:41:05+08:00 |
| 2 | 1 | 2024-02-06T13:41:05+08:00 |
| 3 | 2 | 2024-02-06T12:41:05+08:00 |
现在想在 postgres 里面用一个 sql ,查出每个用户的 transaction 数量,并且把没有的多一行为 0 。
SELECT s.id AS student_id, s.name, COUNT(t.id) AS transactions_count
FROM student s
LEFT JOIN transactions t ON s.id = t.student_id
GROUP BY s.id, s.name;
但是这样,查出来的结果是
| student_id | name | transactions_count |
|---|---|---|
| 1 | a | 2 |
| 2 | b | 1 |
但是我们需要查出的结果是
| student_id | name | transactions_count |
|---|---|---|
| 1 | a | 2 |
| 2 | b | 1 |
| 3 | c | 0 |
求教各位高手指点下这个 sql 怎么写。。。
1 28Sv0ngQfIE7Yloe 2024 年 2 月 6 日奇怪,首先我没用过 pgsql ,但是根据我用 mysql 的经验 ,我有一个疑问,使用 student 作为左表去 left join 右表,为什么会没有 id =3 的数据呢? |
2 Kerwin24 2024 年 2 月 6 日on 条件不是写错了吗 |
4 dongsuo 2024 年 2 月 6 日SELECT s.id AS student_id, s.name, COALESCE (COUNT(t.id),0) AS transactions_count |
5 ss098 2024 年 2 月 6 日with student_transactions as ( select |
6 Fa11ingWood 2024 年 2 月 6 日SELECT s.id AS student_id, s.name, coalse(COUNT(t.id),0) AS transactions_count |
9 ss098 2024 年 2 月 6 日刚刚的代码忘记设为 null 了,现在改了一下可以符合预期 with student_transactions as ( select |
11 qweruiop 2024 年 2 月 7 日发现一个问题。。。 ``` 出来就只有 1 行了,不加 where ,确实有 3 行。。。再请教下各位高手。。。 | student_id | name | transactions_count | |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。