Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在另一列中查找具有最不同值的列?_Sql_Database_Postgresql_Distinct - Fatal编程技术网

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;