mysql计数不同的值

时间:2014-09-03 06:55:52

标签: mysql sql

我很想知道如何计算不同的价值。在选择列上使用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`

也许你可以帮我解决上面的问题以获得我需要的结果。

感谢

1 个答案:

答案 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中不计算空值。

此外,还删除了不必要的后退,括号和资格。