1

ある列の個別の値と別の列の最大値をフィルタリングして、テーブルのすべての列をフェッチするなどの要件があります。

例:

Table A

id name qty
__ __ __

1 Dinesh 10
2 Ramesh 8
3 Dinesh 2
4 Ganesh 3
5 Ganesh 20

ここでは、max(qty); とともに個別の名前を取得しています。

期待される出力:

1 Dinesh 10
2 Ramesh 8
5 Ganesh 20

DB2クエリでこれを達成する方法を誰にも言えますか?

前もって感謝します

4

2 に答える 2

2

これを行うには、相関サブクエリを使用できます。

SELECT T.id, T.name, T.qty
FROM tableA T
WHERE T.qty = (
    SELECT MAX(qty)
    FROM tableA
    WHERE name = T.name
)

ただし、同じ名前で最大数量の別のレコード(など6 Dinesh 10)がある場合は、両方のレコードが返されることに注意してください。これは、クエリを少し異なる方法で記述することで解決できます。

SELECT T.id, T.name, T.qty
FROM tableA T
WHERE NOT EXISTS (
    SELECT 1
    FROM tableA
    WHERE name = T.name
        AND qty > T.qty
        OR (id > T.id AND qty = T.qty)
    )
于 2012-10-03T10:07:41.283 に答える
1

//編集:acattコメントの後、要件を理解しました...

別のオプションは次のとおりです。

SELECT t.id, t.name, t.qty
  FROM tableA t
 WHERE (t.name, t.qty) in (
    SELECT q.name, max(q.qty)
    FROM tableA q
    group by q.name
 )

また、同じ名前と数量のすべての行が返されることを考慮します

于 2012-10-03T10:16:27.190 に答える