簡體   English   中英

根據其他表值選擇GROUP BY的ID

[英]Selecting the ID of GROUP BY based on other table value

我有下表

produtos

|id(pk), nome|
==============
|27      Oats|
|183     Oats|
|190     Gold|
|25      Gold|

representantes_precos

|id(pk),idproduto(fk),preco|
============================
|1      183           13.00|
|2      190           10.00|
|3      25            15.00|

當我使用此查詢

SELECT   ID, NOME
FROM     ( SELECT * FROM produtos) hey
GROUP BY NOME
HAVING   ( COUNT(NOME) > 0 )

我得到以下結果:

|id, nome|
==========
|190 Gold|
|27  Oats|

但是我需要的是:

|id, nome|
==========
|190 Gold|
|183 Oats|

我希望Group By的ID是representantes_precos表中值最高的那個。 我嘗試了合並,子選擇,聯接和其他操作,但沒有成功。

任何幫助將不勝感激。

詩:抱歉我的英語不好。

使用MAX()查找最大的id (按nome分組時),然后查找與該id匹配的行:

SELECT id, nome
FROM produtos p
WHERE id IN (
  SELECT COALESCE(MAX(rp.idproduto), MAX(p.id))
  FROM produtos p
  LEFT JOIN representantes_precos rp ON p.id = rp.idproduto
  GROUP BY p.nome)

在這里使用 SQLFiddle。 請注意,LEFT JOIN允許沒有對應的rp p條記錄,並使用COALESCE()首先在rp表中找到MAX,然后在p表中找到(如果沒有)。

嘗試對一個非唯一列進行GROUP,然后在SELECT子句(本例中為id中包括其他非分組列,這是自找麻煩。 為什么MySQL允許這樣做,然后返回不可預測的結果,這超出了我的范圍。

SELECT   ID, NOME
FROM     ( SELECT p.ID,p.Nome,r.preco FROM produtos p
          left join representantes_precos r
          on p.id=r.idproduto order by preco desc) test
GROUP BY NOME;

小提琴

暫無
暫無

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

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