groupe supérieur de requête db2 par
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.
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.