【问题标题】:SQL query - Left JoinsSQL 查询 - 左连接
【发布时间】:2021-12-25 01:30:06
【问题描述】:

我有 2 张桌子,一张有所有产品和条带的列表,第二张桌子有产品和价格。我已经加入了这两个表,我需要找出基于乐队的最畅销产品是什么。

当我加入 2 个表并使用以下查询时

我得到的是总价值,而不是按乐队划分的。有什么办法可以让乐队分裂。

我所追求的是类似于下面的查询,其中查询仅识别带内最畅销的产品。

对此的任何帮助将不胜感激

【问题讨论】:

标签: sql sqlite join


【解决方案1】:

有时像 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;

测试 dbfiddle here

【讨论】:

  • 这不起作用,我收到一个错误
  • @user14140366 我在 db 上测试过fiddle here 那么你遇到的错误是什么?
  • 我收到语法错误。有没有办法在没有过度分区的情况下获得结果
  • @user14140366 添加了一个额外的解决方案,但它并不漂亮。
  • 你从哪里得到“产品”。我的表名是表 1 和表 2,然后再往下是 prod2。对不起,我很困惑
猜你喜欢
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
相关资源
最近更新 更多