首页 > 解决方案 > 查找从未处理过某个项目的部门

问题描述

我有 2 张桌子

dept:
dept_name
...

sale:
sale_num
sale_qty
item_name
dept_name

我想找到从未处理过 max(sum(sqty)) 表示的最受欢迎项目的部门

我该怎么做呢?

标签: mysqlsql

解决方案


我认为你可以分两步做到这一点

  1. 首先使用子查询确定热门项目
  2. 然后将 sql 写入不从该子查询中选择数据。

获取热门商品 -

select item_name,qty from (
select item_name, qty , rank() over (order by qty desc ) rn from (
select item_name, sum(qty ) qty  from sale group by item_name) rs) where rn = 1

然后你可以编写一个简单not in ()的来获取所需的部门。完整的 SQL 应该如下所示 -

select distinct d.* from dept d, sales s 
where d.dept_name = s.dept_name and 
s.item_name not in (
select item_name from (
select item_name, qty , rank() over (order by qty desc ) rn from (
select item_name, sum(qty ) qty  from sale group by item_name) rs)rs2 where rs2.rn = 1
)

请注意,我使用 item_name 作为标识符,并且名称有时会导致问题(我更喜欢 item id)。我在 Oracle 上进行了测试,所以请在实施之前在您的 mysql 上进行测试。


推荐阅读