sql - SQL 查询 - 左连接
问题描述
我有 2 张桌子,一张有所有产品和条带的列表,第二张桌子有产品和价格。我已经加入了这两个表,我需要找出基于乐队的最畅销产品是什么。
当我加入 2 个表并使用以下查询时
我得到的是总价值,而不是按乐队划分的。有什么办法可以让乐队分裂。
我所追求的是类似于下面的查询,其中查询仅识别带内最畅销的产品。
对此的任何帮助将不胜感激
解决方案
而不是聚合,有时像 ROW_NUMBER 这样的窗口函数会派上用场。
ROW_NUMBER 可以根据一个顺序计算一个序号。
然后就可以用来过滤了。
select Band, Product
, UniPrice as "High Selling"
from
(
select
prod.Band
, prod.Product
, prod.PipelineID
, price.UniPrice
, row_number() over (partition by prod.Band order by price.UniPrice desc) as rn
from Table1 prod
left join Table2 price
on price.PipelineID = prod.PipelineID
where prod.Band is not null
) q
where rn = 1
order by Band;
结果:
乐队 | 产品 | 高销量 :--- | :-------- | ------------: 一个 | SIM0 | 4.5 乙| B2B | 30 C | 苹果 11 | 850 D | 诺基亚A10 | 600
额外的:
如果在 sqlite 版本上没有实现 row_number,则可以使用相关的子查询。
select Band
, MAX(Product) AS Product
, MAX(UniPrice) as "High Selling"
from
(
select
prod.Band
, prod.Product
, prod.PipelineID
, price.UniPrice
, (select max(price2.UniPrice)
from Table1 prod2
join Table2 price2
on price2.PipelineID = prod2.PipelineID
where prod2.Band = prod.Band) as MaxBandPrice
from Table1 prod
left join Table2 price
on price.PipelineID = prod.PipelineID
where prod.Band is not null
) q
where UniPrice = MaxBandPrice
group by Band
order by Band;
在这里测试db<>fiddle
推荐阅读
- spring-boot - Sonar 和 Jacoco:由于没有类文件,因此无法对项目覆盖率进行 JaCoCo 分析
- dax - Dax公式过滤掉以前的记录,只保留物料号的最后一笔交易
- android - ListView 中的 Kotlin 可点击按钮
- autohotkey - 使用剪贴板进行搜索查询时在浏览器中失去焦点 [autohotkey]
- excel - 如果值不为空,请复制到另一张纸
- ios - 在 App Store 评论中绕过 iPad 检查 [仅限 iPhone]?
- reactjs - Reactstrap 按钮链接到同一页面上的部分
- r - 测试中的闪亮反应上下文
- php - 将多个 Csv 文件导入 mysql 表
- or-tools - 如何在 google or-tools 中获取行索引?