Oracle SQL Group by avec ROWNUM dans la clause Having?
Je suis en train d'essayer d'obtenir à l'utilisateur dans la base de données qui a la propriété sur le plus grand segment de la base de données. Pour cela, je vais essayer:
SELECT owner, MAX(bytes)
FROM SYS.DBA_SEGMENTS
GROUP BY owner
HAVING ROWNUM <= 1;
Ceci, cependant, les retours "not a GROUP BY expression"
. Pourquoi ne puis-je pas sélectionner la première ligne seulement? Comment puis-je écrire cette requête? Merci!!!!
ROWNUM
est affecté à des lignes individuelles à partir de la ligne de source (la table de base DBA_SEGMENTS
dans ce cas). HAVING
se réfère à des propriétés de groupes créés par GROUP BY
, pas à des lignes individuelles. Vous ne pouvez pas utiliser ROWNUM
dans HAVING
, pas plus que vous pouvez utiliser BYTES
, ou toute autre expression qui peut avoir des valeurs différentes pour les lignes à l'intérieur d'un même groupe. Exactement ce que le message d'erreur dit.OriginalL'auteur lte__ | 2016-11-05
Vous devez vous connecter pour publier un commentaire.
Vous le pouvez. Dans Oracle 12c+, vous pouvez le faire:
Note le
ORDER BY
.Dans les versions antérieures vous avez besoin d'une sous-requête:
HAVING ROWNUM <= 1;
ne fonctionne pas?Je n'ai jamais utilisé
rownum
dansSELECT
etWHERE
clauses. C'est une pseudo-colonne, géré par Oracle lui-même, de sorte qu'il n'est pas surprenant que la sémantique est un peu bizarre. La documentation ne mentionne pas lehaving
clause: docs.oracle.com/cd/B19306_01/server.102/b14200/....OriginalL'auteur Gordon Linoff
Dans les versions antérieures, vous pouvez également utiliser (juste une seule passe sur les données):
OriginalL'auteur mathguy