我很想知道如何计算不同的价值。在选择列上使用if
我这里有SQLFIDDLE
http://sqlfiddle.com/#!2/6bfb9/3
记录显示:
create table team_record (
id tinyint,
project_id int,
position varchar(45)
);
insert into team_record values
(1,1, 'Junior1'),
(2,1, 'Junior1'),
(3,1, 'Junior2'),
(4,1, 'Junior3'),
(5,1, 'Senior1'),
(6,1, 'Senior1'),
(8,1, 'Senior2'),
(9,1, 'Senior2'),
(10,1,'Senior3'),
(11,1, 'Senior3'),
(12,1, 'Senior3')
我需要计算Junior和Senior列之间的所有不同值。
所有相同的值都算作1。
我需要看到类似的结果。
PROJECT_ID SENIOR_TOTAL JUNIOR_TOTAL
1 3 3
mysql查询就是这个。但这不是一个获得上述结果的查询。
SELECT
`team_record`.`project_id`,
`position`,
SUM(IF(position LIKE 'Senior%',
1,
0)) AS `Senior_Total`,
SUM(IF(position LIKE 'Junior%',
1,
0)) AS `Junior_Total`
FROM
(`team_record`)
WHERE
project_id = '1'
GROUP BY `team_record`.`project_id`
也许你可以帮我解决上面的问题以获得我需要的结果。
感谢
答案 0 :(得分:6)
我想你想要这个:
SELECT
project_id,
COUNT(DISTINCT CASE when position LIKE 'Senior%' THEN position END) Senior_Total,
COUNT(DISTINCT CASE when position LIKE 'Junior%' THEN position END) Junior_Total
FROM team_record
WHERE project_id = 1
GROUP BY project_id
如果WHEN为假,则CASE将返回null(即ELSE NULL
是默认值,为简洁而省略),并且在DISTINCT中不计算空值。
此外,还删除了不必要的后退,括号和资格。