Est-il possible de spécifier une condition dans Count()
? Je voudrais compter uniquement les lignes qui ont, par exemple, "Manager" dans la colonne Position.
Je veux le faire dans l'instruction count, sans utiliser WHERE
; Je pose des questions à ce sujet parce que j'ai besoin de compter à la fois les gestionnaires et les autres SELECT
(quelque chose comme Count(Position = Manager), Count(Position = Other))
ça WHERE
ne me sert à rien dans cet exemple.
sql
sql-server
tsql
agnieszka
la source
la source
SELECT *
, maisSELECT COUNT(*)
, qui est une bête totalement différente.Réponses:
Si vous ne pouvez pas simplement limiter la requête elle-même avec une
where
clause, vous pouvez utiliser le fait que l'count
agrégat compte uniquement les valeurs non nulles:Vous pouvez également utiliser l'
sum
agrégat de manière similaire:la source
null
est spécial. Utilisationcase when IntegerField is null then ...
SUM(CONVERT(int, IsManager))
else null
forcase
, donc l'count()
exemple peut être 10 caractères plus court (si vous comptez l'espace).En supposant que vous ne souhaitez pas restreindre les lignes qui sont retournées car vous agrégez également d'autres valeurs, vous pouvez le faire comme ceci:
Disons que dans la même colonne que vous aviez des valeurs de Manager, Supervisor et Team Lead, vous pouvez obtenir le nombre de chacun comme ceci:
la source
else
pièce, justeend
après la1
.else
car il documente mieux les résultats de l'instruction case, en particulier pour les développeurs SQL novices. Par souci de concision, il peut être supprimé dans ce cas.La réponse de @Guffa est excellente, il suffit de souligner que peut-être est plus propre avec une déclaration IF
la source
Cela dépend de ce que vous voulez dire, mais l'autre interprétation de la signification est l'endroit où vous voulez compter les lignes avec une certaine valeur, mais ne voulez pas restreindre le
SELECT
à JUSTE ces lignes ...Vous le feriez en utilisant
SUM()
une clause dans, comme ceci au lieu d'utiliserCOUNT()
: par exemplela source
Vous pouvez également utiliser le mot-clé pivot si vous utilisez SQL 2005 ou supérieur
plus d'infos et de Technet
Ensemble de données de test
la source
Voulez-vous dire juste ceci:
Si oui, alors ouais ça marche!
la source
Je sais que c'est vraiment vieux, mais j'aime l'
NULLIF
astuce pour de tels scénarios, et je n'ai trouvé aucun inconvénient jusqu'à présent. Il suffit de voir mon exemple de copie et de collage, qui n'est pas très pratique cependant, mais montre comment l'utiliser.NULLIF
pourrait vous donner un petit impact négatif sur les performances, mais je suppose que cela devrait toujours être plus rapide que les sous-requêtes.Commentaires appréciés :-)
la source
la source
Je pense que vous pouvez utiliser une simple clause WHERE pour sélectionner uniquement le nombre d'enregistrements.
la source
Voici ce que j'ai fait pour obtenir un ensemble de données qui comprenait à la fois le total et le nombre répondant aux critères, dans chaque conteneur d'expédition. Cela m'a permis de répondre à la question "Combien de conteneurs d'expédition ont plus de X% d'articles de plus de 51"
la source
Remarque avec PrestoDB SQL (de Facebook), il existe un raccourci:
https://prestodb.io/docs/current/functions/aggregate.html
la source
En utilisant cela, vous obtiendrez le nombre de gestionnaires
la source