SQL 如何在连接中使用 distinct on 和计数函数

SQL how can I use distinct on with the count function inside a join

我是 sql 的新手,正在使用 postgres 9.6,我有 2 个查询,我想将它们合并为 1 个。我想使用 Count 函数并按我在此处所做的降序排序

第一次查询

select count(s.city)::text as most_topics,
city::text || ', ' || state::text AS location from streams s 
group by (location) order by most_topics desc limit 5

第一个查询正是我想要的信息,顺序完全相同,问题是我需要进行内部联接并从第二个 table 获取数据,我已在此处完成。第二个查询获取我需要的所有数据但是我不知道如何在第二个查询中使用 Count() 函数任何建议都很好。总而言之,第一个查询将我想要的数据减半,因为我需要在字段 (city and state) 上加入另一个名为 zips 的数据。第二个查询为我提供了我需要的所有数据,但我似乎无法使用 Count() 函数。

第二次查询

select DISTINCT ON(s.city,s.state)s.city as location,
z.latitudes,z.statelong,z.longitudes,z.thirtylatmin,z.thirtylatmax
 ,z.longitudes,z.thirtylatmin,z.thirtylatmax,     
 z.thirtylonmin,z.thirtylonmax from streams s inner join zips z
 on (s.city=z.city and s.state=z.state) where  order by s.city,s.state desc limit 5

第一次查询结果

第二次查询结果:Lutz应该在最上面而不是最下面

您可以使用 CTE 或子查询:

with l5 as (
      select count(s.city)::text as most_topics,
             city::text || ', ' || state::text AS location,
             city, state
      from streams s 
      group by city, state
      order by most_topics desc
      limit 5
     ) 
select distinct on (l5.locatin) l5.location, l5.most_topics, z.*
from l5 join
     zips z
     on l5.city = z.city and l5.state = z.state
order by l5.location;