首页 > 解决方案 > SQL 查询以查找每个给定位置的最多供应商数量

问题描述

您能帮我找到正确的 MySQL 查询,以获取每个给定位置的最多供应商数量,并按名称和商店名称列出它们:

1 - 查询必须找出哪个位置的供应商数量最多,然后按名称和他们工作的商店的名称列出它们。

我有以下表格:

CITIES 
(
 ID "unique",
 NAME
)


SHOPS
(
 ID "unique",
 NAME,
 CITY_ID ( foreign key of CITIES TABLE ID)
)

VENDORS
(
 ID "unique",
 NAME,
 SHOP_ID ( foreign key of SHOPS TABLE ID)
)

带有虚拟数据的示例

CITIES : NY, SF

SHOPS: Boom - NY, Flash - NY, Sofast - SF

Vendors:

Mark : Boom,
John : Boom,
Carlos : Sofast,
Alex : Sofast,
David : Flash,
James: Flash

纽约的供应商数量最多,因此应该列出

Mark : Boom, John : Boom, David : Flash, James: Flash

标签: mysqlsqlcountgreatest-n-per-groupwindow-functions

解决方案


如果您正在运行 MySQL 8.0,则可以使用窗口函数来解决此问题:

select *
from (
    select x.*, rank() over(order by cnt) rn
    from (
        select v.*, count(*) over(partition by c.id) cnt
        from cities c
        inner join shops   s on s.city_id = c.id
        inner join vendors v on v.shop_id = s.id
    ) t
) t
where rn = 1

最内部的查询连接三个表,并计算每个城市有多少供应商。下一级按降序排列记录。最后,最后一级过滤排名靠前的行。


推荐阅读