【问题标题】:How to count distinct numbers on the table level and group them如何在表级别计算不同的数字并将它们分组
【发布时间】:2012-12-20 19:28:44
【问题描述】:

我有下表:

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 都属于 UK,但 ccc 在表级别中没有不同的编号(与与 name 关联的 number 重复aaa,但 aaa 在另一个国家/地区)。

问题是:如何在表级别查询不同的numbers(当前查询计算不同的值,但在组级别)根据他们的国家分组?

【问题讨论】:

  • 美国还是英国应该计入哪个国家/地区的 111?

标签: mysql


【解决方案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;

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

FIDDLE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2013-03-27
    • 2018-07-09
    • 1970-01-01
    相关资源
    最近更新 更多