请考虑以下示例表结构:
+-------------------------------+--------------+------+-----+---------+-------+
| 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/