質問

私は何時間も試してきましたが、クエリをGEできません。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

ご覧のとおり、企業には多くのユーザーがいて、それぞれが会社ごとに異なる数量を持っているため、結果はユーザーが会社あたりの数量が最も多いことになるはずです。 IE:会社 nissn 2人のユーザーがいて、それぞれに(300のマーク)と(145のTom)があります

だから、それは私に300のマークとなる最高のユーザーを与えるべきです。 toyt, frd, kryr. 。それらすべてがクエリに必要です。
それがクエリで可能かどうか、またはストアドプロシージャを作成する必要があるのだろうか。

役に立ちましたか?

解決

これを行うことができます 分析クエリ. 。しかし、注意してください。パターンは通常、ネストされたサブ征服を含むように機能します。 (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規格によれば、そのクエリは機能するはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top