如何在一个查询中获取子集的计数以及总计数?

时间:2009-03-11 18:45:08

标签: sql mysql

在简单的情况下,假设我有一个如下所示的表:

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

是否可以计算在同一查询中启用(启用= 1)的所有窗口小部件的计数与所有窗口小部件的计数?

例如,如果我总共有3个小部件并且启用了一个小部件,那么我想让我的查询结果看起来像:

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

1 个答案:

答案 0 :(得分:12)

如果启用始终为1或0,则可以执行以下操作:

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

如果是另一个值,可能是:

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
相关问题