2011-04-25 1 views
1

J'ai une table avec un champ appelé type, où 3 lignes différentes sont possibles: 1, 2 et 3. Maintenant, je me fous du tout 3. J'ai besoin de compter combien de lignes il y a avec type = 1 et avec type = 2. Je fais cela avec 2 requêtes, comme ceci:Puis-je sélectionner plusieurs comptes dans une requête?

Query1: SELECT COUNT(id) as count FROM users WHERE type='1'
Query2: SELECT COUNT(id) as count FROM users WHERE type='2'

Puis-je faire cela avec seulement 1 seule requête? Si oui, devrais-je ou non? À quoi ressemblerait la requête?

+0

en double? http://stackoverflow.com/questions/2300020/mysql-multiple-counts-in-single-query – Hubro

+0

Les moyens "faciles" de le faire dans une seule requête ont l'inconvénient que les deux comptes sont retournés en tant que lignes séparées et donc vous avez besoin d'un code client supplémentaire pour les extraire. Les autres réponses parviennent à fournir la réponse en une seule ligne, ce qui rend les choses plus faciles pour le client mais est probablement moins efficace sur le serveur. – Neil

Répondre

10
SELECT type, 
     COUNT(id) AS count 
    FROM users 
WHERE type IN ('1','2') 
GROUP BY type 
3
SELECT type, COUNT(id) AS count 
FROM users 
GROUP BY type 
HAVING type < 3 
-2
SELECT sum(case when type = '1' then 1 else 0 end) as count_for_one, 
     sum(case when type = '2' then 1 else 0 end) as count_for_tow 
FROM users 
WHERE type IN ('1','2') 
-2

Si vous souhaitez que les numéros séparés,

SELECT SUM(IF(type='1', 1, 0)), SUM(IF(type='2', 1, 0)) 
FROM users WHERE type IN ('1', '2') 
Questions connexes