Sql 在另一列中查找具有最不同值的列?
我的数据库中有一个名为“资产”的表,如下所示:Sql 在另一列中查找具有最不同值的列?,sql,database,postgresql,distinct,Sql,Database,Postgresql,Distinct,我的数据库中有一个名为“资产”的表,如下所示: party_no ...misc_cols_in_between... loc_reverse_geoloc_adr ------------------------------------------------------------------------------------------------ 013 ...data... 367 Cleta T
party_no ...misc_cols_in_between... loc_reverse_geoloc_adr
------------------------------------------------------------------------------------------------
013 ...data... 367 Cleta Tunnel, South Moriahton, Palestinian Territory
666 ...data... NULL
185 ...data... Schillerstraße 50-50, 08340, Schwarzenberg/Erzgeb., Sachsen, DE
267 ...data... 18701-18999 N County Road 2500E, Oakland, IL, 61943, US
389 ...data... Le Rocher-Percé, Québec, CA
666 ...data... 94531, Antioch, CA, US
185 ...data... 76 Willochra Rd, Salisbury Plain, South Australia, 5109, AU
SELECT party_no, count(*)
FROM (
SELECT DISTINCT ON (party_no, loc_reverse_geoloc_adr) party_no, loc_reverse_geoloc_adr
FROM assets
) AS a
GROUP BY party_no
ORDER BY COUNT(*) DESC
LIMIT 1;
我需要的是,在“loc\u reverse\u geoloc\u adr”列中找到具有最多不同值的“party\u no”
所以,假设第666方有1000个唯一的位置,从加利福尼亚州魁北克到加利福尼亚州安提俄克,还有更多,并且没有其他列有那么多不同的位置值,那么我的查询应该返回第666方。因此,如果另一方777在美国加利福尼亚州出现了2000次(不明显),那么第666方仍将作为1返回,因为我想知道哪一方编号与“loc_reverse_geoloc_adr”值关联最为不同
我试图在loc\u reverse\u geoloc\u adr和order BY上创建一个GROUP BY,但我无法将它链接到一个party\u no,它也没有真正返回我上面提到的内容。您必须在
DISTINCT()
子查询上运行count(*)
,如下所示:
party_no ...misc_cols_in_between... loc_reverse_geoloc_adr
------------------------------------------------------------------------------------------------
013 ...data... 367 Cleta Tunnel, South Moriahton, Palestinian Territory
666 ...data... NULL
185 ...data... Schillerstraße 50-50, 08340, Schwarzenberg/Erzgeb., Sachsen, DE
267 ...data... 18701-18999 N County Road 2500E, Oakland, IL, 61943, US
389 ...data... Le Rocher-Percé, Québec, CA
666 ...data... 94531, Antioch, CA, US
185 ...data... 76 Willochra Rd, Salisbury Plain, South Australia, 5109, AU
SELECT party_no, count(*)
FROM (
SELECT DISTINCT ON (party_no, loc_reverse_geoloc_adr) party_no, loc_reverse_geoloc_adr
FROM assets
) AS a
GROUP BY party_no
ORDER BY COUNT(*) DESC
LIMIT 1;
内部子查询为您提供记录,按party_no和loc_reverse_geoloc_adr区分。1行,每种组合<代码>(第三方编号、位置反向\u地理位置\u adr)
然后在该子查询上,您只需按party_no获取计数组,并获取最大值。您必须在
DISTINCT()子查询上运行count(*)
,如下所示:
party_no ...misc_cols_in_between... loc_reverse_geoloc_adr
------------------------------------------------------------------------------------------------
013 ...data... 367 Cleta Tunnel, South Moriahton, Palestinian Territory
666 ...data... NULL
185 ...data... Schillerstraße 50-50, 08340, Schwarzenberg/Erzgeb., Sachsen, DE
267 ...data... 18701-18999 N County Road 2500E, Oakland, IL, 61943, US
389 ...data... Le Rocher-Percé, Québec, CA
666 ...data... 94531, Antioch, CA, US
185 ...data... 76 Willochra Rd, Salisbury Plain, South Australia, 5109, AU
SELECT party_no, count(*)
FROM (
SELECT DISTINCT ON (party_no, loc_reverse_geoloc_adr) party_no, loc_reverse_geoloc_adr
FROM assets
) AS a
GROUP BY party_no
ORDER BY COUNT(*) DESC
LIMIT 1;
内部子查询为您提供记录,按party_no和loc_reverse_geoloc_adr区分。1行,每种组合<代码>(第三方编号、位置反向\u地理位置\u adr)
然后在该子查询上,您只需按参与方编号获取计数组,并获取最大值。我只需使用
count(distinct)
:
如果要将NULL
作为一个单独的值计算,则需要稍微调整:
select party_no,
(count(distinct loc_reverse_geoloc_adr) +
max( (loc_reverse_geoloc_adr is null)::int )
) as num_lrga
from assets a
group by party_no
order by num_lrga desc
limit 1;
我只需使用
count(distinct)
:
如果要将NULL
作为一个单独的值计算,则需要稍微调整:
select party_no,
(count(distinct loc_reverse_geoloc_adr) +
max( (loc_reverse_geoloc_adr is null)::int )
) as num_lrga
from assets a
group by party_no
order by num_lrga desc
limit 1;