交叉表查询

时间:2013-03-24 20:55:57

标签: mysql sql

我想将不同的值计算为分数。我想要计算的值是7到10.表中也有1到6但我不想计算它们。我无法做对。

表中的值如下所示:

RPO    RSP     RSV  
10     9       9
9      10      8 
10     7       7
7      10      8
4      4       3 

我希望结果如下:

Score  RPO RSP RSV
10     2   2   0
9      1   1   1
7      1   1   1

这是我的代码。需要改进它。

select  

count(rank.rpo) as RPO,
count(rank.rsp) as RSP,
count(rank.rsv) as RSV

from
round 
left join base 
on round.id = base.round_id 

left join rank 
on round.id = rank.round_id and rank.number = base.number

where 
base.result = 1 
and round.round_date between '2013-03-15' and '2013-03-22'
and round.gameform = 'V4'
and round.gameform not like "OSPEC"

group by ??

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

drop table if exists ids;

create table ids (score int unsigned primary key)
select distinct rpo as score from rank
union
select distinct rsp as score from rank
union
select distinct rsv as score from rank;

select ids.score,
       sum(if(rank.rpo=ids.score,1,0)) as RPO,
       sum(if(rank.rsp=ids.score,1,0)) as RSP,
       sum(if(rank.rsv=ids.score,1,0)) as RSV
  from ids,round 
left join base on round.id = base.round_id 
left join rank on round.id = rank.round_id and rank.number = base.number
 where base.result = 1 
   and round.round_date between '2013-03-15' and '2013-03-22'
   and round.gameform = 'V4'
   and round.gameform not like "OSPEC"
   group by ids.score with rollup;

如果您不想创建临时表,可以尝试:

select ids.score,
       sum(if(rank.rpo=ids.score,1,0)) as RPO,
       sum(if(rank.rsp=ids.score,1,0)) as RSP,
       sum(if(rank.rsv=ids.score,1,0)) as RSV
  from 
  (
      select distinct rpo as score from rank
      union
      select distinct rsp as score from rank
      union
      select distinct rsv as score from rank
  ) ids, round 
left join base on round.id = base.round_id 
left join rank on round.id = rank.round_id and rank.number = base.number
 where base.result = 1 
   and round.round_date between '2013-03-15' and '2013-03-22'
   and round.gameform = 'V4'
   and round.gameform not like "OSPEC"
group by ids.score with rollup;

有关工作示例,请参阅http://sqlfiddle.com/#!2/9b7d7/6