0

次の表があります。

name | number
--------------
aaa  | 111
aaa  | 555
bbb  | 222
ccc  | 111
ddd  | 333
eee  | 444

そして以下:

name | country
---------------
aaa  | US
bbb  | UK
ccc  | UK
ddd  | DE
eee  | UK

個別の番号の数 (テーブル レベル全体で個別) を選択し、国に基づいてこれらの個別の値をグループ化する必要があります。

次のクエリを使用しました。

SELECT count(distinct t1.number), t2.country
FROM db.t1
JOIN db.t2
ON t1.name=t2.name
GROUP BY t2.country;

私が得る結果は次のとおりです。

3 | UK
2 | US
1 | DE

最初の表に示されているように、私は 5 つの異なる数字しか持っていません。しかし、クエリの後、6 つの異なる数字が得られます。これは、名前: bbbccceeeすべてが英国に属してcccいるが、テーブル レベルで個別の番号を持っていないためです ( にnumber関連付けられている と重複していますname aaaaaa、別の国にあります)。

numbers問題は、国に基づいてグループ化されたテーブル レベル (現在のクエリは個別の値をカウントしますが、グループ レベル) で個別にクエリを実行するにはどうすればよいですか?

4

1 に答える 1

1
SELECT count(distinct t1.number), t2.country
FROM (SELECT number, name
      FROM db.t1
      GROUP BY number) t1
JOIN db.t2
ON t1.name=t2.name
GROUP BY t2.country;

これにより、番号が重複する国の 1 つが任意に選択されます。

フィドル

于 2012-12-20T19:56:07.610 に答える