2

なぜこのクエリは奇妙な結果をもたらすのですか..

SELECT max(greatest(home_team_total,away_team_total)) AS max_team_score, id 
FROM `match`
WHERE id IN (1,2,3,4,5)

その間

SELECT greatest(home_team_total,away_team_total) AS max_team_score, id 
FROM `match`
WHERE id IN (1,2,3,4,5)
ORDER BY max_team_score DESC
LIMIT 1

正しい結果が得られます..

最大値は両方のケースでのみ正しいですが、最初のケースでは一致の ID が間違っています..

4

2 に答える 2

3

idこれは、SELECT 句にフィールドを含めているためです。どのIDが欲しいですか?最大行に関連付けられたものが必要になるかもしれませんが、複数のものが存在する可能性がありますmin(greatest(home_team_total,away_team_total))

2 番目のクエリは、この問題に必要なクエリです。

少しわかりやすくするための編集:

クエリは次と同等です。

SELECT max(greatest(home_team_total,away_team_total)) AS max_team_score, ANY(id)
FROM `match`
WHERE id IN (1,2,3,4,5)

http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.htmlを見てください。

「サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。」

于 2012-06-21T05:02:43.000 に答える
0

最初のクエリを機能させたい場合は、次のように変更する必要があります。

SELECT maximum(home_team_total,away_team_total) AS max_team_score, id FROM match WHERE maximum(home_team_total,away_team_total) = ( SELECT max(greatest(home_team_total,away_team_total)) FROM match )

結果に複数の行を含めることができることに注意してください。そのため、「LIMIT 1」の代替案よりもこのソリューションをお勧めします。

于 2012-06-21T05:12:20.963 に答える