J'ai une table d'étudiants:
id | age
--------
0 | 25
1 | 25
2 | 23
Je souhaite interroger tous les élèves et une colonne supplémentaire qui compte le nombre d'élèves du même âge:
id | age | count
----------------
0 | 25 | 2
1 | 25 | 2
2 | 23 | 1
Quelle est la manière la plus efficace d'y parvenir? Je crains qu'une sous-requête ne soit lente et je me demande s'il existe un meilleur moyen . Y a-t-il?
sql
performance
Assaf Lavie
la source
la source
Si vous utilisez Oracle, une fonctionnalité appelée analytique fera l'affaire. Cela ressemble à ceci:
Si vous n'utilisez pas Oracle, vous devrez revenir aux décomptes:
la source
Voici une autre solution. celui-ci utilise une syntaxe très simple. Le premier exemple de solution acceptée ne fonctionnait pas sur les anciennes versions de Microsoft SQL (c'est-à-dire 2000)
la source
Je ferais quelque chose comme:
la source
la source
et si les données de la colonne «âge» ont des enregistrements similaires (c'est-à-dire que de nombreuses personnes ont 25 ans, beaucoup d'autres 32 ans et ainsi de suite), cela crée de la confusion en alignant le bon décompte sur chaque élève. afin de l'éviter, j'ai également rejoint les tables sur la carte d'étudiant.
la source