select count(if(exp,t,f))为number

时间:2014-10-14 08:36:26

标签: mysql

我有两个mysql表

TB1:id_q(pk),q1,q2,q3,q4,q5,q6,q7,q8,q9,q10

TB2:id(pk),id_q(fk),ip,ans

和我的查询

select count(if(q1==-1 and q2==-1 and q3==-1 and q4==-1 and q5==-1 and q6==-1 and q7==-1 and q8==-1 and
q9==-1 and q10==-1)) as number from tb1 where id=number

select count(ans (if(ans==1))) ans q1 ,count(ans (if(ans==2))) ans q2,count(ans (if(ans==3))) ans q3,
count(ans (if(ans==4))) ans q4,count(ans (if(ans==5))) ans q5,count(ans (if(ans==6))) ans q6 ,
count(ans (if(ans==7))) ans q7,count(ans (if(ans==8))) ans q8,count(ans (if(ans==9))) ans q9,
count(ans (if(ans==10))) ans q10 from tb1,tb2 where tb1.id_q=tb2.id_q

?? 我想在一个查询中进行两次查询?

1 个答案:

答案 0 :(得分:1)

对于SQL-Server,Count(Column_Name)将计算非空的总行数;因此,您可以使用Case语句计算第一个表达式,返回1表示True或Null表示False:

select count(Case When (q1=-1 and q2=-1 and q3=-1 and q4=-1 and q5=-1 and q6=-1 and q7=-1 and q8=-1 and q9=-1 and q10=-1) Then 1 Else Null End) as number from tb1

第二种可能性是使用SUM()函数和Case语句返回1或0:

select Sum(Case When (q1=-1 and q2=-1 and q3=-1 and q4=-1 and q5=-1 and q6=-1 and q7=-1 and q8=-1 and q9=-1 and q10=-1) Then 1 Else 0 End) as number from tb1

您对第二个查询执行相同的操作。 (当然,如果语法不同,你必须使用正确的指令在MySQL上做一个Case语句。)

我忘了提到你需要在Case语句中使用正确的等于运算符=而不是==