mysql - 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
解决方案
如果您正在运行 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
最内部的查询连接三个表,并计算每个城市有多少供应商。下一级按降序排列记录。最后,最后一级过滤排名靠前的行。
推荐阅读
- javascript - IOS 13.3 - 单击后退按钮时刷新页面
- mysql - 当我从转储 Mysql 中恢复时会发生什么
- sql - 在 SQL 中合并两个表,用一个公共列
- api - 通过 Ansible 一次 api 调用同时更新 100 个值
- c# - SeriLog Formatter:如何在json配置文件中传递formatter参数
- scala - Scala spark有什么办法可以将这个数据框转换成这个?
- sonarqube - SonarQube 7.9.1 LTS 未启动:无法创建共享内存
- ios - 为什么 Xcode 11 颜色的属性选择器在缩略图中有 2 种不同的颜色?
- node.js - 如何在nodejs中获取文件大小作为异步等待?
- vue.js - vue I18n:如何制作漂亮的更改语言的下拉列表