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 个不同的数字。这是因为名称: bbb, ccc,eee都属于英国,但ccc在表级别中没有不同的数字(与number关联的重复name aaa,但aaa在另一个国家/地区)。

问题是:如何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;

这会任意选择具有重复数字的国家之一。

小提琴

于 2012-12-20T19:56:07.610 回答