1

我有以下表格

产品

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

代表_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表上价值最高的 ID。我尝试了合并和子选择、连接和其他东西,但没有成功。

任何帮助将不胜感激。

Ps.:对不起我的英语不好。

4

2 回答 2

1

用于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 允许p没有对应的记录rp,并且使用 COALESCE() 先在rp表中查找 MAX,p如果没有找到则再查找表。

尝试对非独特列进行 GROUP,然后在 SELECT 子句中包含其他非分组列(id在您的情况下),这是自找麻烦。为什么 MySQL 允许这样做,然后返回不可预测的结果,这超出了我的理解。

于 2013-06-24T14:48:48.973 回答
0
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;

小提琴

于 2013-06-24T16:13:22.760 回答