如何识别使用 COUNT() 聚合的非相同值?
How to identify non-identical values being aggregated with COUNT()?
我有一个 table 包含三列:城市 ID、语言代码和城市:
city_id | language_code | city
----------------------------------
1 | en | London
1 | es | Londres
1 | pt | Londres
2 | de | Köln
2 | en | Cologne
3 | it | Cologne
在某些外语中,城市的拼写方式相同,例如伦敦的西班牙语和葡萄牙语名称是 Londres
.
但在某些情况下,相同的名称可以指代完全不同的位置,例如Cologne
是德国城市科隆的英文名称,但在意大利也有一个同名的小镇。
我希望能够检测到 table 中有多个条目的城市,但只能检测到链接到不同 city_id
值的城市。在我的例子中,这将是 Cologne
但不是 Londres
因为 es
和 pt
语言版本都指向相同的 city_id
.
我认为这将是一件相当容易的事情,但我无法在单个查询中获得结果。相反,我首先对结果进行重复数据删除,然后汇总它们:
WITH deduped_cities AS (
SELECT DISTINCT city, city_id
FROM cities
ORDER BY city
)
SELECT city, COUNT(city_id) AS total
FROM deduped_cities
GROUP BY city
HAVING COUNT(city_id) > 1;
这给了我预期的结果:
city | total
----------------
Cologne | 2
我只是想知道是否可以用一条 SELECT 语句达到同样的效果。
您基本上只有一个 SELECT
,但您可以将 DISTINCT
' 与 COUNT
一起使用
SELECT city, COUNT(city_id) AS total
FROM cities
GROUP BY city
HAVING COUNT( DISTINCT city_id) > 1;
我相信你可以在聚合和 having 子句中做不同的:
select city, count (distinct city_id)
from cities
group by city
having count (distinct city_id) > 1
我有一个 table 包含三列:城市 ID、语言代码和城市:
city_id | language_code | city
----------------------------------
1 | en | London
1 | es | Londres
1 | pt | Londres
2 | de | Köln
2 | en | Cologne
3 | it | Cologne
在某些外语中,城市的拼写方式相同,例如伦敦的西班牙语和葡萄牙语名称是 Londres
.
但在某些情况下,相同的名称可以指代完全不同的位置,例如Cologne
是德国城市科隆的英文名称,但在意大利也有一个同名的小镇。
我希望能够检测到 table 中有多个条目的城市,但只能检测到链接到不同 city_id
值的城市。在我的例子中,这将是 Cologne
但不是 Londres
因为 es
和 pt
语言版本都指向相同的 city_id
.
我认为这将是一件相当容易的事情,但我无法在单个查询中获得结果。相反,我首先对结果进行重复数据删除,然后汇总它们:
WITH deduped_cities AS (
SELECT DISTINCT city, city_id
FROM cities
ORDER BY city
)
SELECT city, COUNT(city_id) AS total
FROM deduped_cities
GROUP BY city
HAVING COUNT(city_id) > 1;
这给了我预期的结果:
city | total
----------------
Cologne | 2
我只是想知道是否可以用一条 SELECT 语句达到同样的效果。
您基本上只有一个 SELECT
,但您可以将 DISTINCT
' 与 COUNT
SELECT city, COUNT(city_id) AS total
FROM cities
GROUP BY city
HAVING COUNT( DISTINCT city_id) > 1;
我相信你可以在聚合和 having 子句中做不同的:
select city, count (distinct city_id)
from cities
group by city
having count (distinct city_id) > 1