2

私は何時間も試してきましたが、クエリを実行できません。DB2を使用して次のことを実行したいと思います。テーブル会社とユーザーから私は会社/ユーザーごとに次のチケット数量情報を持っています

QUERY USING:
SELECT T.USER, COUNT(T.USER) AS QUANITTY, T.COMPANY FROM TICKET T
INNER JOIN COMPANY P ON P.COMPANY = T.COMPANY
GROUP BY (T.USER, T.COMPANY) ORDER BY QUANTITY DESC 

結果は次のとおりです。

user         company      quantity
----------------------------------
mark         nissn        300
tom          toyt         50
steve        kryr         80
mark         frd          20    
tom          toyt         120    
jose         toyt         230    
tom          nissn        145    
steve        toyt         10    
jose         kryr         35    
steve        frd          100

これが結果である必要があります(企業ごとのトップユーザー)

user         company      quantity
----------------------------------
mark         nissn        300    
jose         toyt         230    
steve        frd          100    
steve        kryr         80

ご覧のとおり、会社には多くのユーザーがいて、会社ごとに数量が異なるため、結果として、会社ごとの数量が最も多いユーザーが得られるはずです。すなわち:会社nissnには2人のユーザーがいて、それぞれに(300のマーク)と(145のトム)があります

したがって、300でマークされる最高のユーザーが得られるはずです。 toyt、、、、も同じfrdですkryr。クエリでそれらすべてが必要です。
クエリでそれが可能かどうか、またはストアドプロシージャを作成する必要があるかどうか疑問に思います。

4

1 に答える 1

6

これは、分析クエリを使用して行うことができます。ただし、注意してください。このパターンは通常、ネストされたサブクエリを含むように機能します。(1つはデータセットを生成し、次はパターンに追加し、3つ目は必要な行を選択します。)

この場合、次のようになります。

元のクエリ。

SELECT T.USER, COUNT(T.USER) AS QUANTITY, T.COMPANY
FROM TICKET T
  JOIN COMPANY P
    ON P.COMPANY = T.COMPANY
GROUP BY (T.USER, T.COMPANY)

分析クエリ。(サブクエリに名前を付けることに注意してくださいs。私はDB2を使用していませんが、標準ではサブクエリの削除を厳密に防止していません。また、サブクエリを必要とするデータベースを少なくとも1つ知っています。)

SELECT user, quantity, company
  , RANK () OVER (PARTITION BY company ORDER BY quantity DESC) as r
FROM ( ... previous query ... ) s

最終結果。

SELECT user, quantity, company
FROM ( ... previous query ... ) t
WHERE r = 1

結合されたクエリは次のとおりです。

SELECT user, quantity, company
FROM (
    SELECT user, quantity, company
      , RANK () OVER (PARTITION BY company ORDER BY quantity DESC) as r
    FROM (
        SELECT T.USER, COUNT(T.USER) AS QUANTITY, T.COMPANY
            FROM TICKET T
              JOIN COMPANY P
                ON P.COMPANY = T.COMPANY
            GROUP BY (T.USER, T.COMPANY)
      ) s
  ) t
WHERE r = 1

私が言ったように、私はDB2を使用していません。しかし、SQL標準によれば、そのクエリは機能するはずです。

于 2011-06-13T22:37:56.843 に答える