簡體   English   中英

顯然我的子查詢返回超過 1 行

[英]Apparently my Subquery returns more than 1 row

所以我想從零件表中找到價格大於或等於相應產品線的平均價格的所有項目。

我嘗試了 wirh 子查詢和分組依據,但我的子查詢返回不止一行。 有幫助嗎?

select * from parts
where price >= (select distinct avg(price)
from parts group by productLine)

你必須在parts表和平均價格查詢之間創建一個連接,因為你現在有你的子查詢,它返回所有產品線的平均價格,你很可能有不止一個......而且DISTINCT沒有在這里提供幫助,除非您所有的產品線都具有完全相同的AVG(price) ——這是不太可能的。

對於 mysql 的較新版本,您可以使用公用表表達式

with prices(avgprice, productline) as (
  select avg(price), productline
  from parts 
  group by productline)

select pa.* 
from parts pa inner join prices pr on pa.productline = pr.productline
where pa.price >= pr.avgprice
  

如果你使用的是不支持 CTE 的舊版本 mysql,你也可以在子查詢的結果上加入

select pa.*
from parts pa inner join (
  select avg(price) as  avgprice, productline
    from parts 
    group by productline) pr on pa.productline = pr.productline
where pa.price >= pr.avgprice

或者您可以將子查詢限制在相應的產品線上

select *
from parts p 
where price >= (
  select avg(price) 
  from parts pa 
  where pa.productline = p.productline)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM