1

次のテーブルがあります

製品

|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 を、テーブルで最も高い値を持つ ID にしたいと考えていrepresentantes_precosます。合体とサブ選択、結合などを試しましたが、成功しませんでした。

どんな助けでも大歓迎です。

P.: 私の拙い英語で申し訳ありません。

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 を使用します。p対応する を持たないレコードを許可する LEFT JOIN と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 に答える