J'ai besoin de compter combien de lignes de chaque type existe dans une table. Mais, même si aucune ligne pertinente, je dois toujours montrer chaque type au set des résultats et son comptoir. Compteur sera 0 s'il n'y a pas de lignes pertinentes.
Ceci est mon SQL actuel: p> Le résultat de retour SQL actuel uniquement s'il y a une ligne (s) avec étudiant_type 10 ou 12, à la date spécifiée, mais si Il n'y a pas de lignes, rien ne reviendra. P> J'ai besoin du résultat sera toujours sous cette forme: P> student_type count
10 0
12 0
3 Réponses :
- Créez 2 datasets Tableau A (tous les types de stydent que vous souhaitez afficher) - et tableau B (le comptage pour chaque type) --Et sélectionner tout à partir du tableau A, lorsque vous avez ensuite laissé la jointure extérieure à B qui signifie s'il n'y a pas d'enregistrement correspondant dans B, vous obtenez NULL (que vous pouvez convertir à 0)
Sélectionnez A.Student_Type, ISNULL (B .cnt, 0) comme «Comptez» de p> joint extérieur gauche p> (Sélectionnez Student_Type, comptez (*) comme "CNT" des étudiants où étudiant_type dans (10, 12) et enregistrement_Time entre "2018-1-1" et "2018-12-31" groupe par étudiant_type;) b
sur a.student_type = b.student_type; p> p>
Veuillez formater votre code et fournir une explication. Les réponses du code-seules ne sont pas recommandées.
Considérez l'agrégation conditionnelle où vous déplacez votre où code> condition à un Sélectionnez l'expression code> pour éviter de filtrer les enregistrements conditionnels zéro. Au-dessous des résumes, les conditions code> true code> par votre agrégation de regroupement équivalent à compter où les zéros vont revenir. SELECT student_type,
SUM(student_type IN (10, 12) AND
registration_time BETWEEN '2018-01-01' AND '2018-12-31') as 'count'
FROM students
GROUP BY student_type;
Pas travaillé pour moi. Obtenez toujours des résultats vierges lorsque aucune donnée pertinente (j'ai besoin d'un compteur zéro dans ce cas)
Ah bon? Absolument aucun résultat montrent? Voir Rextest Demo: REXTESTESTER.COM/JTVY80711 (faites défiler jusqu'au fond de 500 rangées). AS l'exemple montre, tout étudiant_type i> montrera quelles que soient les comptes et les comptes diffèrent par groupe avec des zéros. En rétrospectivement, nous pouvons supprimer la clause in () code> car elle fait partie du groupe Groupe par code> colonne.
Tu as raison. En effet, cela fonctionne, suppose que je n'ai pas bien ché .. / En outre, comme je le vois, cette requête fonctionne beaucoup plus lentement sur de grandes tables en comparant les requêtes avec la jointure ou la jointure de la jointure.
cela fonctionne pour moi en utilisant la jointe gauche-jointure ou avec "sur la mouche" rejoindre la jointure: p>
Inspiration d'ici Mattmazur.com/2017/ 11/01 / ...
Ah !! Je vois, il y a une table distincte Student_Type i>. Vous n'avez pas fait cela clair dans l'ouverture post.
Oui, mais vous pouvez voir le code sans la jointure gauche. En effet, à la première fois que je préférais sans la jointure gauche.
Envisagez de manipuler des problèmes d'affichage de données dans le code de l'application. Omettre cela, voir: Pourquoi devrais-je fournir un MCVE pour ce qui me semble être une requête SQL très simple?
La fonction de comptage SQL ne fonctionne pas dans la manière dont vous espérez. Sauf si vous avez tous les types d'étudiants possibles énumérés dans une table distincte "étudiant_types"? Dans ce cas en utilisant une jointure gauche de cette table aux étudiants pourraient vous aider.
@Strowberry - Je peux le résoudre avec le code d'application, mais une meilleure solution pour mon cas sera avec SQL.
@Adyson - Peut-il y a une option pour créer une telle table 'On-The-Fly' à la requête?
(Sélectionnez 10 Student_Type Union Select 12) x - On-the-Fly
@Ron Idéalement, vous devriez en avoir un déjà pour que vous ayez une clé étrangère à cette conte de la table des étudiants. Cela devrait signifier A) Vous pouvez stocker une description de texte pour chaque type d'étudiant (et ne pas avoir à le répéter ailleurs) et b) vous pouvez avoir une intégrité dans votre table des élèves, car la contrainte de clé étrangère garantira uniquement des ID Students_Type valides. (c.-à-d. ceux qui se produisent dans la table Student_Type) peuvent être insérés. Une base de données correctement normalisée aurait déjà une telle table dans ce scénario.