Ggo*_*olo 21 sql postgresql join count
我有两张桌子:
Companies: (id, name, city)
Workers: (id, name)
Run Code Online (Sandbox Code Playgroud)
我想让所有公司按照雇员人数排序.
结果应该给:
count | company id | company name | city
------------------------------------------
90 6 foo corp NY
45 9 bar corp LA
0 3 foobar corp HO
Run Code Online (Sandbox Code Playgroud)
我试过了:
select
c.*,
count(w.id) as c
from
companies c
left join
workers w
on
c.id = w.company_id
group by
c.id
order by
c desc;
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为它告诉我也按g.name分组:/
有任何想法吗?
Eri*_*ric 28
你把表和列别名化为同一个东西,所以不要这样做.它并非无效,只是很难遵循.
无论如何,包括您选择的所有不在您的聚合中的列group by:
select
count(w.id) as mycount,
w.company_id,
c.company_name,
c.city
from
companies c
left join workers w on
c.id=w.company_id
group by
w.company_id,
c.company_name,
c.city
order by mycount desc;
Run Code Online (Sandbox Code Playgroud)
如果您不希望返回计数结果(由于 ORM 框架左右),您可以直接在 order by 子句中应用它:
select
c.*
from
companies c
left join
workers w
on
c.id = w.company_id
group by
c.id
order by
count(w.id) desc;
Run Code Online (Sandbox Code Playgroud)
使用 postgreSQL 11 测试