2

私は次の表を持っています

+----+----------+-----+
| id | priority | sub |
+----+----------+-----+
| 1  |    1     |  A  |
| 2  |    3     |  A  |
| 3  |    4     |  A  |
| 4  |    2     |  B  |
| 5  |    9     |  B  |
+----+----------+-----+

各サブの優先度が最も高い行を取得しようとしています。したがって、この結果:

+----+----------+-----+
| id | priority | sub |
+----+----------+-----+
| 3  |    4     |  A  |
| 5  |    9     |  B  |
+----+----------+-----+

グループ化を試みましたが、予測できない結果が得られます。私の推測では、ネストされたクエリで、最初は次のように最高の優先度を見つけ始めました。

select max(priority),sub from t group by sub

それは私に

+----------+-----+
| priority | sub |
+----------+-----+
|    4     |  A  |
|    9     |  B  |
+----------+-----+

しかし、IDも必要です。クエリに追加すると、明らかに間違ったIDが返されます。この結果を同じテーブルのクエリと結合すると、エラー(ER_NONUNIQ_TABLE(1066))が発生します。これは理にかなっています...私をプッシュできる人は誰でも正しい方向に?

4

1 に答える 1

3

PRIORITYサブクエリの背後にある考え方は、各の最大値を個別に取得することSUBです。その結果は、元のテーブルに結合されます。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  sub, max(priority) maxVal
            FROM    tableName
            GROUP BY sub
        ) b ON a.sub = b.sub AND
                a.priority = b.maxVal
于 2012-12-17T22:44:49.843 に答える