postgresqlでカウントでソートする方法は?
-
05-07-2019 - |
質問
2つのテーブルがあります:
Companies: (id, name, city)
Workers: (id, name)
すべての企業を取得し、従業員数で分類したい。
結果は次のようになります。
count | company id | company name | city
------------------------------------------
90 6 foo corp NY
45 9 bar corp LA
0 3 foobar corp HO
試しました:
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;
ただし、g.nameでグループ化するように指示されるため、機能しません:/
アイデアはありますか
解決
テーブルとカラムを同じものとしてエイリアス化したので、そうしないでください。無効ではありません。従うのは難しいです。
とにかく、 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;
他のヒント
これをサブクエリとして試してください:
SELECT C.*
FROM
(
SELECT C.Id, C.Company_Name, C.City, COUNT(W.Id) AS CNT
FROM Companies C
LEFT JOIN Workers W ON W.Company_Id = C.Id
GROUP BY C.Id, C.Company_Name, C.City
) T
ORDER BY T.CNT
(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;
postgreSQL 11でテスト済み
所属していません StackOverflow