Supposons que j'ai une table avec une colonne numérique (appelons-la "score").
Je voudrais générer un tableau des comptes, qui montre combien de fois les scores sont apparus dans chaque plage.
Par exemple:
gamme de score | nombre d'occurrences ------------------------------------- 0-9 | 11 10-19 | 14 20-29 | 3 ... | ...
Dans cet exemple, il y avait 11 lignes avec des scores compris entre 0 et 9, 14 lignes avec des scores compris entre 10 et 19 et 3 lignes avec des scores compris entre 20 et 29.
Existe-t-il un moyen simple de configurer cela? Que recommandez-vous?
sql
sql-server
tsql
Hugh
la source
la source
Une approche alternative impliquerait de stocker les plages dans une table, au lieu de les incorporer dans la requête. Vous vous retrouveriez avec une table, appelez-la Ranges, qui ressemble à ceci:
Et une requête qui ressemble à ceci:
Cela signifie mettre en place une table, mais il serait facile à maintenir lorsque les plages souhaitées changent. Aucun changement de code nécessaire!
la source
Je vois des réponses ici qui ne fonctionneront pas dans la syntaxe de SQL Server. J'utiliserais:
EDIT: voir les commentaires
la source
Dans postgres (où
||
est l'opérateur de concaténation de chaîne):donne:
la source
La réponse de James Curran était la plus concise à mon avis, mais le résultat n'était pas correct. Pour SQL Server, l'instruction la plus simple est la suivante:
Cela suppose une table temporaire #Scores que j'ai utilisée pour le tester, je viens de remplir 100 lignes avec un nombre aléatoire entre 0 et 99.
la source
la source
la source
Cela vous permettra de ne pas avoir à spécifier de plages et devrait être indépendant du serveur SQL. Math FTW!
la source
Je ferais cela un peu différemment pour qu'il évolue sans avoir à définir chaque cas:
Pas testé, mais vous avez l'idée ...
la source
la source
Assurez-vous d'utiliser un mot autre que «range» si vous êtes dans MySQL, sinon vous obtiendrez une erreur pour exécuter l'exemple ci-dessus.
la source
Étant donné que la colonne triée sur (
Range
) est une chaîne, le tri chaîne / mot est utilisé à la place du tri numérique.Tant que les chaînes ont des zéros pour compléter les longueurs des nombres, le tri doit toujours être sémantiquement correct:
Si la plage est mixte, ajoutez simplement un zéro supplémentaire:
la source
Essayer
la source
Peut-être que vous demandez comment faire fonctionner de telles choses ...
Bien sûr, vous invoquerez une analyse complète de la table pour les requêtes et si la table contenant les scores à compter (agrégations) est grande, vous voudrez peut-être une solution plus performante, vous pouvez créer une table secondaire et utiliser des règles, telles que
on insert
- vous pourriez l'examiner.Cependant, tous les moteurs SGBDR n'ont pas de règles!
la source