1

たとえば、テーブルがあります。

id ext_id param

1    5      0

2    5      1

3    6      0

4    6      0

5    7      1

6    7      1

それぞれ。

次のような結果が必要です。

2 5 1

3 6 0

5 7 1

MySQLがext_idでグループ化され、最大param値を持つ要素を表示するようにします。すべてが等しい場合-私はいずれかが必要です。

私は次のようなことを試しました:

SELECT * FROM t 
GROUP BY ext_id HAVING param = MAX(param)

しかし、それはトリックをしませんでした((

4

1 に答える 1

2

paramまず、group by queryを使用して、すべてのext_idの最大値を見つける必要があります。次に、このクエリの結果をtで再度結合する必要があります。ここで、ext_id一致し、次のようになりparamますmax_param

SELECT t2.*
FROM (
  SELECT ext_id, max(param) as max_param
  FROM t
  GROUP BY ext_id ) t1 inner join t t2
  on t1.ext_id=t2.ext_id and t1.max_param=t2.param
GROUP BY t2.ext_id

同じ最大値を持つ複数の行が存在する可能性があるため、paramもう一度グループ化しext_idます。MySqlではそうすることができ、それぞれに対して1行だけが取得されますext_id

于 2012-12-19T18:54:07.450 に答える