mysql - 根据列的不同值将mysql表中的记录计为不同的列

标签 mysql count

请考虑以下示例表结构:

+-------------------------------+--------------+------+-----+---------+-------+
| Field                         | Type         | Null | Key | Default | Extra |
+-------------------------------+--------------+------+-----+---------+-------+
| msisdn                        | varchar(20)  | NO   | PRI | NULL    |       |
| job_search_text               | varchar(500) | YES  |     | NULL    |       |
| local_job_region_id           | int(11)      | YES  | MUL | NULL    |       |
|   .......                     | .......      | ...  | ... | ....    | ....  |
|   .......                     | .......      | ...  | ... | ....    | ....  |
|   .......                     | .......      | ...  | ... | ....    | ....  |
|   .......                     | .......      | ...  | ... | ....    | ....  |
|   .......                     | .......      | ...  | ... | ....    | ....  |
|   .......                     | .......      | ...  | ... | ....    | ....  |
+-------------------------------+--------------+------+-----+---------+-------+

我想按如下方式计算行数:

If job_search_text='a' then count row as 'A'
Else If job_search_text='b' then count row as 'B'
Else If job_search_text='c' then count row as 'C'
.
.
.
Else count row as 'Other'

我写的查询如下:

SELECT COUNT(CASE WHEN job_search_text='a' THEN 1 END) as 'A',COUNT(CASE WHEN job_search_text='b' THEN 1 END) as 'b' FROM subscriber 

但是这个查询会比较每个 CASE 的 job_search_text,并且它不处理上面提到的 Else 情况。请帮助我。

最佳答案

您的方向是正确的,但是将计数更改为 SUM( IF( ))...类似于

select
      sum( if( s.job_search_text = 'a', 1, 0 ) ) as 'A',
      sum( if( s.job_search_text = 'b', 1, 0 ) ) as 'B',
      sum( if( s.job_search_text = 'c', 1, 0 ) ) as 'C',
      sum( if( s.job_search_text = 'd', 1, 0 ) ) as 'D',
      sum( if( s.job_search_text = 'e', 1, 0 ) ) as 'E',
      sum( if( s.job_search_text IN ( 'a', 'b', 'c', 'd', 'e' ), 0, 1 ) ) as 'Other'
   from 
      subscriber s

另一个的“IN”测试,如果它找到已经计算在内的东西,那么它的总和为零。如果它找不到 a-e 条目之一,它将为您的“其他”计数求和。

关于mysql - 根据列的不同值将mysql表中的记录计为不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788133/

相关文章:

mysql - 如何在 mysql 中从一行中删除 "no duplicate"条记录

java - 为什么我的计数器不能正常计数?尽管我的 if 语句未填写,但它添加了 +1

r - group_by grepl 表达式 dplyr R

mysql - 结合数据透视表、计数、组、联合、频率、连接和顺序的复杂查询

mysql - 我的 C 程序中的 Mysql 连接出现问题(握手错误)

mysql - 如何根据结果集中的值限制MySQL结果?

python - 如何优化这个 MySQL 计数算法?

MySQL:你如何计算一行中的非空字段,然后计算相同的值?

javascript - 具有数据库中特定信息的模态,具体取决于用户单击的位置

mysql - 选择每个客户的姓名以及他们在 session 中花费的总时间