3

私たちのオンライン注文プラットフォームには、店舗が配達する通りのデータベースがあります。POSシステムからのエクスポートに基づいています。

現実の世界では、正確な住所に配達できる店舗は1つだけです。これは、通りの名前が複数の店舗で計算されているデータベースには当てはまりません。

表は次のようになります-簡略化:

通り

street_id
street_name
street_from
street_to
store_id

現在テーブルにある行の例:

1, "very nice street", 1, 999, 6
2, "very nice street", 1, 999, 10
3, "random street", 1, 53, 10
4, "random street", 2, 64, 10
5, "unique street", 1, 999, 10
6, "unique street", 1, 999, 6

同じ通りの名前が2つ以上の店舗を参照している場合に、すべての行を取得する方法についてのアイデアはありますか?上記の例では、クエリで「とても素敵な通り」と「ユニークな通り」を返したいと思います。「ランダムな通り」はストア番号10のみを参照しているため、必要ありません。

したがって、次のSQLは「ランダムストリート」を返します

SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;
4

2 に答える 2

5

GROUP BYあなたはこれをとによって達成することができますHAVING

SELECT * from streets group by street_name having count(*) > 1

実用的なサンプルは次のとおりです:SQLFiddle。そして、ここにあなたが面白いと思うかもしれない短い記事があります:HAVINGとGROUPBYSQL句


編集によると、目的の結果を返すクエリは次のようになります。

SELECT street_name, store_id, count(*) 
FROM streets 
GROUP BY street_name
HAVING COUNT(DISTINCT store_id) > 1

の使用に注意してくださいDISTINCT store_id。別のrandom street参照ストア#10があった場合、が原因で通過しませんDISTINCT更新されたSQLFiddleに例を含めました。

于 2013-02-04T11:15:06.677 に答える
4

これを試して、

SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;
于 2013-02-04T11:16:22.560 に答える