Mysql SQL:对于每个不同的C,使用最大值B获得A

Mysql SQL:对于每个不同的C,使用最大值B获得A,mysql,sql,sqlite,greatest-n-per-group,Mysql,Sql,Sqlite,Greatest N Per Group,在我的示例中,我有一个包含不同场馆信息的表,其中包含城市、场馆名称和容量列。我需要为每个城市中容量最高的场馆选择城市和场馆名称。因此,如果我有数据: city | venue | capacity LA | venue1 | 10000 LA | venue2 | 20000 NY | venue3 | 1000 NY | venue4 | 500 。。。查询应返回: LA | venue2 NY | venue3 有谁能给我一些关于如何在SQL中完成这个查询的建议吗?我陷

在我的示例中,我有一个包含不同场馆信息的表,其中包含城市、场馆名称和容量列。我需要为每个城市中容量最高的场馆选择城市和场馆名称。因此,如果我有数据:

city | venue | capacity LA | venue1 | 10000 LA | venue2 | 20000 NY | venue3 | 1000 NY | venue4 | 500 。。。查询应返回:

LA | venue2 NY | venue3
有谁能给我一些关于如何在SQL中完成这个查询的建议吗?我陷入了连接和嵌套查询:P.谢谢

一种方法是不存在:

select t.city, t.venue
  from tbl t
  join (select city, max(capacity) as max_capacity from tbl group by city) v
    on t.city = v.city
   and t.capacity = v.max_capacity

一种方法是使用“不存在”:

常用的方法是使用max:

常用的方法是使用max:


您可以使用外部应用程序对这些值进行排序,并将结果带回主查询

另一种选择是使用RowNum函数


您可以使用外部应用程序对这些值进行排序,并将结果带回主查询

另一种选择是使用RowNum函数


首先,编写一个查询,查找按城市分组的最大容量,然后查询与该城市和容量匹配的场馆…首先,编写一个查询,查找按城市分组的最大容量,然后查询与该城市和容量匹配的场馆。。。
select i.*
from info i
where not exists (select 1
                  from into i2
                  where i2.city = i.city and i2.capacity > i.capacity);
select y.city, y.venue_name
from yourtable y
    join (select city, max(capacity) maxcapacity
          from yourtable
          group by city
    ) t on y.city = t.city and y.capacity = t.maxcapacity
SELECT 
  v.city, 
  Ranked.Venue,
  Ranked.Capacity   
FROM Venues v WITH (NOLOCK) 
   Outer Apply 
        ( 
           SELECT TOP 1 
                Venue, Capacity
            FROM Venues Ranked WITH (NOLOCK) 
            WHERE v.City = Ranked.City 
            ORDER BY Capacity DESC 
         ) as Ranked 
 GROUP BY 
     v.city,
     Ranked.Venue,
     Ranked.Capacity