3

私はこのSQLを持っています:

SELECT itemId, parentId, value FROM item ORDER BY value DESC

正しく返されます:

+--------+------------------+
| itemId | parentId | value |
+--------+------------------+
|      1 |        5 |   500 |
|      4 |        1 |   500 |
|      2 |        5 |    10 |
|      5 |        1 |    10 |
|      3 |        5 |     0 |
|      6 |        1 |     0 |
+--------+----------+-------+

「GROUP BY parentId」を追加しようとしましたが、これは ORDER BY 句を無視して、2 つのランダムな項目を選択しているようです。

+--------+------------------+
| itemId | parentId | value |
+--------+------------------+
|      2 |        5 |    10 |
|      6 |        1 |     0 |
+--------+----------+-------+

各parentIdの値が最も高い項目のみを返すには、どのSQLを使用すればよいですか?:

+--------+------------------+
| itemId | parentId | value |
+--------+------------------+
|      1 |        5 |   500 |
|      4 |        1 |   500 |
+--------+----------+-------+
4

1 に答える 1

1

それぞれについて、そののitemIdである場合にのみ選択します。valueMAXparentId

SELECT itemId, parentId, value
FROM item i
WHERE value = (SELECT MAX(value) 
               FROM item t 
               WHERE t.parentId = i.parentId)

どちらが返されますか:

| ITEMID | PARENTID | VALUE |
-----------------------------
|      1 |        5 |   500 |
|      4 |        1 |   500 |

デモ

于 2012-09-23T17:11:19.243 に答える