[英]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.