Question

Je l'ai essayé pendant des heures mais ne peut pas ge la requête, je veux faire l'aide de DB2 suivante. De la table Company et utilisateurs Je les informations de quantité de billets suivants par entreprise / utilisateur

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 

Résultat est:

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

doit être le résultat (Top utilisateur par entreprise)

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

comme vous pouvez le voir il y a beaucoup d'utilisateurs dans une entreprise et chacune des quantités différentes par entreprise, le résultat devrait obtenir l'utilisateur avec la plus grande quantité par entreprise. à savoir: Entreprise nissn il dispose de 2 utilisateurs et chacun a (marque avec 300) et (tom à 145)

il devrait donc me donner le plus grand utilisateur qui serait marque avec 300. Ce serait la même pour toyt, frd, kryr. Je dois tous dans une requête.
Je me demande si cela est possible dans une requête ou je dois créer une procédure stockée.

Était-ce utile?

La solution

You can do this with analytic queries. But be careful. The pattern usually works out to involve nested subqueries. (One to produce a dataset, the next to add it to the pattern, the third to select out the rows you want.)

In this case it should look something like this.

Original query.

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)

Analytic query. (Note that the s is to name the subquery. I have not used DB2, but the standard strictly doesn't prevent them to be dropped, and I know at least one database that requires them.)

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

Final result.

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

The combined query is:

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

As I say I have not used DB2. But according to the SQL standard, that query should work.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top