2009-03-11 6 views
3

Dans le cas simple, supposons que j'ai une table qui ressemble à ceci:Comment puis-je obtenir à la fois le nombre d'un sous-ensemble et le nombre total d'ensembles dans une requête?

mysql> describe widget; 
+---------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+---------+--------------+------+-----+---------+-------+ 
| name | varchar(255) | YES |  | NULL |  | 
| enabled | smallint(1) | YES |  | NULL |  | 
+---------+--------------+------+-----+---------+-------+ 

Est-il possible d'obtenir un compte de tous les widgets qui sont activés (activé = 1) dans la même requête en nombre de tous les widgets?

Par exemple, si j'ai 3 widgets totalisées et un est activé, je voudrais obtenir les résultats de mon dos de requête qui ressemblent à:

mysql> SELECT ... as enabled_count, ... as total_count ... 
+---------------+-------------+ 
| enabled_count | total_count | 
+---------------+-------------+ 
|    1 |   3 | 
+---------------+-------------+ 

Répondre

11

Si activé est toujours 1 ou 0, vous peut faire:

SELECT 
    COUNT(*) as total_count, 
    SUM(enabled) as enabled_count 
FROM widget 

Si c'est une autre valeur, peut-être:

SELECT 
    COUNT(*) as total_count, 
    SUM(CASE WHEN enabled in ('enabled value 1', 'enabled value 2') 
     THEN 1 
     ELSE 0 
     END 
    ) as enabled_count 
FROM widget 
Questions connexes