Selecting column from one table and count from another
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | t1 id | name | include ------------------- 1 | foo | TRUE 2 | bar | TRUE 3 | bum | FALSE t2 id | SOME | table_1_id ------------------------- 1 | 42 | 1 2 | 43 | 1 3 | 42 | 2 4 | 44 | 1 5 | 44 | 3 |
期望的输出:
1 2 3 4 | name | COUNT(SOME) ------------------ foo | 3 bar | 1 |
我目前通过其他解决方案查看:
1 2 3 4 5 6 7 8 9 | SELECT a.name, COUNT(r.some) FROM t1 a JOIN t2 r ON a.id=r.table_1_id WHERE a.include = 'true' GROUP BY a.id, r.some; |
但这似乎得到了我
1 2 3 4 5 6 | name | COUNT(r.some) -------------------- foo | 1 foo | 1 bar | 1 foo | 1 |
我不是sql专家(我可以做简单的查询)所以我也在谷歌搜索,但找到我发现的大多数解决方案给我这个结果。 我可能错过了一些非常简单的事情。
只需从
1 2 3 4 5 6 | SELECT a.name, COUNT(r.some) FROM t1 a JOIN t2 r ON a.id=r.table_1_id WHERE a.include = 'true' GROUP BY a.name |
要在
这是因为多列组要求所有列值相同。
有关详细信息,请参阅此链接。,在多列上使用group by
实际上在你的情况下,如果有些相等,table_1_id不相等(反之亦然)。 所以分组不会发生。 所有都是单独显示的。
如果条目是这样的,
1 2 3 4 5 6 | id | SOME | table_1_id ------------------------- 1 | 42 | 1 2 | 43 | 1 3 | 42 | 2 4 | 42 | 1 |
那么输出就是。,
1 2 3 4 5 | name | COUNT ------------------ foo | 2 (FOR 42) foo | 1 (FOR 43) bar | 1 (FOR 42) |
实际上,如果你想按照Juergen的说法对1列进行分组,你可以从groupby子句中删除