SQL - Affichage des entrées qui sont le max d'un comte?
CREATE TABLE doctor( patient CHAR(13), docname CHAR(30) );
Dire que j'ai un tableau comme celui-ci, alors comment pourrais-je afficher les noms des médecins qui l'ont le plus de patients? Comme si la plupart était de trois et de deux médecins, trois patients, alors je voudrais afficher les noms des deux.
Ce serait d'obtenir le max patients:
SELECT MAX(count)
FROM (SELECT COUNT(docname) FROM doctor GROUP BY docname) a;
C'est tous les médecins et le nombre de patients qu'ils ont:
SELECT docname, COUNT(docname) FROM doctor GROUP BY name;
Maintenant je ne peux pas comprendre comment les combiner pour répertorier uniquement les noms des médecins qui ont le max patients.
Grâce.
Ce produit de base de données et la version?
Il est difficile d'aider sans savoir ce que la base de données nous allons travailler, comme @Thomas suggéré.
Vous avez nommé vos patients de table "auteur"? Quel est le schéma du "patient" de la table?
Je suppose que c'est SQL Server, si non faites le moi savoir.
Votre médecin table contient des informations sur les patients?
Il est difficile d'aider sans savoir ce que la base de données nous allons travailler, comme @Thomas suggéré.
Vous avez nommé vos patients de table "auteur"? Quel est le schéma du "patient" de la table?
Je suppose que c'est SQL Server, si non faites le moi savoir.
Votre médecin table contient des informations sur les patients?
OriginalL'auteur Stewage | 2011-03-01
Vous devez vous connecter pour publier un commentaire.
Cela devrait le faire.
D'autre part, si vous avez besoin uniquement de la première entrée, puis
OriginalL'auteur manish_s
Cela devrait le faire pour vous:
OriginalL'auteur squillman
Voici une autre alternative qui ne dispose que d'une sous-requête au lieu de deux:
OriginalL'auteur Mark Byers
Qui permet à toute fonction dans un ISO SQL spécification puisque vous ne spécifiez pas un produit de base de données ou une version, et en supposant que la table de patients est appelé "patients" et a une colonne appelée "docname", ce qui suit pourrait vous donner ce que tu voulais:
OriginalL'auteur Thomas
Prendre les deux requêtes et se joindre à eux pour obtenir le max:
OriginalL'auteur JonH
Lors de l'utilisation ... d'AVOIR COUNT(*) = ( ...MAX().. ) œuvres:
n'est pas pris en charge.
Tout en utilisant TOP /LIMITE /RANG etc œuvres:
Également, à l'aide de TOP /LIMITE de 1 donnez une seule rangée - ce que s'il ya deux ou plusieurs médecins avec le même nombre maximal de patients?
Je voudrais diviser le problème en plusieurs étapes:
Obtenir champ cible(s) et associée à compter
À l'aide de la ci-dessus comme une "déclaration d'étendue de l'affichage", inscrivez-vous pour obtenir le max de comptage de ligne(s)
La clause, qui définit une "déclaration d'étendue de l'affichage", donne effectivement nommé sous-requêtes qui peuvent être ré-utilisés dans la même requête.
La JOINTURE correspond à la ligne(s) du nombre maximal de patients.
Alors que cette solution, à l'aide de déclaration d'étendue de points de vue, c'est plus long, c'est:
Il est plus facile à tester que les parties de la requête peut fonctionner de manière autonome.
Il est auto-documenter que la requête directement reflète l'exigence
c'est à dire la déclaration de l'étendue de visualiser les listes le champ cible(s) et associés comte.
Il est extensible comme si les autres conditions ou les champs sont obligatoires, ce qui peut être facilement ajouté à l'énoncé de la portée de la vue.
par exemple, dans ce cas, la table stucture devrait être modifié pour inclure un médecin-id comme clé primaire, et cela devrait faire partie des résultats.
OriginalL'auteur Kevin Swann
Une autre alternative à l'aide CTE:
OriginalL'auteur Boney