0

少なくとも50の場所がある場所のみを取得できるようにクエリを作成したいと思います。

場所の表があります:

Id, City, Country
1, Austin, USA
2, Paris, France

そして、Location_idによって場所に接続された場所の表

Id, Name, Details, Location_id
1, The Zoo, blah, 2
2, Big Park, blah, 2

私はそのようにそれらに参加することができます:

SELECT Places.name、places.id、locations.country、locations.city FROM Places INNER JOIN location ON Places.location_id = location.id

少なくとも50の場所がある都市の結果のみを取得し、それらを最大量で注文するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

4

HAVING句を指定してGROUPBYを使用します。

SELECT locations.country, locations.city, COUNT(*)
FROM places
     INNER JOIN locations ON places.location_id = locations.id
GROUP BY locations.country, locations.city
HAVING COUNT(*) >= 50
于 2009-08-24T11:31:35.880 に答える
3

OK上記の答えはほぼそこにありますが、いくつかの間違いがあるので、正しいバージョンを投稿するだけです。

SELECT locations.country, locations.city, COUNT(*) as count_of_places
FROM places
     INNER JOIN locations ON places.location_id = locations.id
GROUP BY locations.country, locations.city
HAVING COUNT(*) >= 50
ORDER BY count_of_places;
于 2009-08-24T11:45:27.317 に答える
1

この句を使用してhaving、集計列の値によってこれらの行を制限できます。また、MySQLではレイジーを使用group byできるため、これを完全に利用できます。

select
    l.country,
    l.city,
    p.name,
    p.details,
    count(*) as number_of_places
from
    locations l
    inner join places p on
        l.id = p.location_id
group by
    l.id
having
    count(*) >= 50
order by
    number_of_places,
    l.country,
    l.city,
    p.name
于 2009-08-24T11:37:34.247 に答える
0

ややパフォーマンスが悪いが、機能するはずです:

SELECT places.name, places.id, sq.country, sq.city, sq.counter FROM (SELECT Locations.id, country,city, count(*) as counter FROM Locations JOIN Places ON (Locations.Id=Places.Location_id) GROUP BY location.id HAVING count(*)> = 50)AS sq JOIN Places ON(sq.id = Places.Location_id) ORDER BY counter DESC`

PS正確な構文はデータベースによって異なる場合がありますが、これがmysqlそのまま互換性があるかどうかはわかりません。

于 2009-08-24T11:37:21.797 に答える