588 votes

Est-il possible de préciser la condition dans Count() ?

Il est possible de spécifier une condition dans `` ? Je voudrais compter uniquement les lignes qui ont par exemple « Manager » valeur dans la colonne de Position.

Edit : veuillez lire attentivement, j’ai envie de le faire instruction, ne pas moyen de compter ; Je demande à ce sujet car j’ai besoin de compter les gestionnaires et les autres dans la même sélectionner (quelque chose comme donc est inutile pour moi dans cet exemple

921voto

Guffa Points 308133

Si vous ne pouvez pas juste limitez la requête elle-même avec un clause, vous pouvez utiliser le fait que le ensemble ne compte que les valeurs non null :

Vous pouvez également utiliser la `` globale de manière similaire :

259voto

RedFilter Points 84190

En supposant que vous ne souhaitez pas restreindre les lignes retournées parce que vous êtes l'agrégation d'autres valeurs comme bien, vous pouvez le faire comme ceci:

select count(case when Position = 'Manager' then 1 else null end) as ManagerCount
from ...

Disons que, dans la même colonne que vous avaient des valeurs de Manager, Superviseur, chef d'Équipe, vous pouvez obtenir le nombre de chaque comme ceci:

select count(case when Position = 'Manager' then 1 else null end) as ManagerCount,
    count(case when Position = 'Supervisor' then 1 else null end) as SupervisorCount,
    count(case when Position = 'Team Lead' then 1 else null end) as TeamLeadCount,
from ...

45voto

AdaTheDev Points 53358

Dépend de ce que tu veux dire, mais l'autre interprétation de la signification est l'endroit où vous voulez compter les lignes avec une certaine valeur, mais qui ne veulent pas restreindre l'SÉLECTIONNEZ SIMPLEMENT ces lignes...

Vous auriez du le faire en utilisant SUM() avec une clause, comme ça au lieu d'utiliser la fonction COUNT(): par exemple

SELECT SUM(CASE WHEN Position = 'Manager' THEN 1 ELSE 0 END) AS ManagerCount,
    SUM(CASE WHEN Position = 'CEO' THEN 1 ELSE 0 END) AS CEOCount
FROM SomeTable

13voto

Matthew Whited Points 12255

Vous pouvez également utiliser le Pivot de mots clés si vous utilisez SQL 2005 ou au-dessus

plus d'infos et de Technet

SELECT *
FROM @Users
PIVOT (
    COUNT(Position)
    FOR Position
    IN (Manager, CEO, Employee)
) as p

Jeu De Données De Test

DECLARE @Users TABLE (Position VARCHAR(10))
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('Manager')
INSERT INTO @Users (Position) VALUES('CEO')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')
INSERT INTO @Users (Position) VALUES('Employee')

7voto

Dana Points 9876

Voulez-vous dire simplement ceci:

SELECT Count(*) FROM YourTable WHERE Position = 'Manager'

Si oui, alors yup qui fonctionne!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X