例如: table: studentID,chinese,english,maths,.....SQL: select studentID,sum(ifnull(chinese,0)+ifnull(english,0)+ifnull(...,0)+...) as totalScode,sum(if(ifnull(chinese,-1)>=0,1,0)+if(ifnull(english,-1)>=0,1,0)+if(ifnull(...,-1)>=0,1,0)+...) as totalNum from table ;
结果要求统计出,70,在整个表中,出现了多少次: select sum(if(cj1=70,1,0)+if(cj2=70,1,0)+if(cj3=70,1,0)+...+if(cj9=70,1,0)+if(cj10=70,1,0)) as totalnum70 from table where 1 group by 1
-------------------付上和专家的聊天记录,功能实现了-------------------------------- 数据表 name,cj1,cj2,cj3,cj4.....cj10 xx,90,70,65,80,......50 zs,90,70,65,80,......80 ss,90,70,65,80,......90 zz,54,65,70,66,......70 KyoUs 2008年12月05日 13点49分47秒 说: 不好意思,我只是举个例子,我还没有数据库呢 是从cj1-cj10中选择 KyoUs 2008年12月05日 13点50分40秒 说: name,cj1,cj2,cj3,cj4,cj5 xx,90,70,65,80,50 zs,90,70,65,80,80 ss,90,70,65,80,90 zz,54,65,70,66,70 如果是这样子,结果就是5 WWWWA 2008年12月05日 13点53分37秒 说: SELECT sum(if(cj1=70,1,0))+sum(if(cj2=70,1,0))+ sum(if(cj3=70,1,0))+sum(if(cj4=70,1,0))+sum(if(cj5=70,1,0)) from ff2 KyoUs 2008年12月05日 13点59分53秒 说: 结果应该是: 90:4 70:5 65:4 80:4 50:1 54:1 66:1 WWWWA 2008年12月05日 14点01分03秒 说: select cj1,count(*) from ( select cj1 from tt union all select cj2 from tt union all select cj3 from tt union all select cj4 from tt union all select cj5 from tt) a group by cj1KyoUs 2008年12月05日 14点04分42秒 说:能不能稍微解释一下? 我怎么感觉,这样子写的话,只能把cj1字段出现过的数字汇总啊。 WWWWA 2008年12月05日 14点07分22秒 说: NO,将CJ1-CJ5的内容从行->列,CJ1只是取一个字段名的作用,内容是CJ1-CJ5,你可以看看 KyoUs 2008年12月05日 14点24分37秒 说: a,是合成的新表? WWWWA 2008年12月05日 14点27分20秒 说: 虚拟表的别名 KyoUs 2008年12月05日 14点30分11秒 说: 哦哦。是说,还以为和 a group by cj1是一句呢。不好意思,我没有运行环境,只能模拟着理解。而且本来也不懂SQL 还是不太懂 select cj1,count(*)这一句,cj1,本身有什么作用吗?如果有虚拟表a了,是不是这个cj1本身,也可以随便写? WWWWA 2008年12月05日 14点36分06秒 说: 1、建议你看看SQL的格式、要求; 2、select cj1,count(*):按CJ1字段名分组,CJ1是一个字段名,内容CJ1-CJ5 CJ1可以重新取名。 KyoUs 2008年12月05日 15点01分24秒 说: 1,再次感激 2,事很急,只能麻烦你了。以问代看了。 3,我模拟一下运行状态,问问不理解的地方 ----------------------------------- select cj1 from tt union all select cj2 from tt union all select cj3 from tt union all select cj4 from tt union all select cj5 from tt) a --------------------- 生成一个虚拟表a,结构是 cj1一个字段,里面存了tt表中,cj1-cj5字段所有数据 表达起来就是 cj1 70 60 89 79 69 60.. 这样子 然后再结合 select cj1,count(*) from a ,可以统计cj1,一共有多少数据 加上 group by cj1 后,就可以统计,相同的数据分别有多少了? 那么,a表中cj1这个字段,是因为合并时,第一条是select cj1 from tt,所以才是cj1的吗? 比如别人这个例子中,最后一个运行结果中的name字段 SQL> select * from a; ID NAME ---------- ---------- 1 aa 2 bb 3 cc 6 dd 7 ee SQL> select * from b; ID ADDR ---------- ---------- 1 aa 2 bb 3 cc 4 dd 5 ee SQL> select * from a 2 union all 3 select * from b; ID NAME ---------- ---------- 1 aa 2 bb 3 cc 6 dd 7 ee 1 aa 2 bb 3 cc 4 dd -------------------- 专家还没回答。。可是问题太幼稚了。
1 aa 2 bb 3 cc 6 dd 7 ee 1 aa 2 bb 3 cc 4 dd 5 ee
-------------------付上和专家的聊天记录,功能实现了-------------------------------- 数据表 name,cj1,cj2,cj3,cj4.....cj10 xx,90,70,65,80,......50 zs,90,70,65,80,......80 ss,90,70,65,80,......90 zz,54,65,70,66,......70 KyoUs 2008年12月05日 13点49分47秒 说: 不好意思,我只是举个例子,我还没有数据库呢 是从cj1-cj10中选择 KyoUs 2008年12月05日 13点50分40秒 说: name,cj1,cj2,cj3,cj4,cj5 xx,90,70,65,80,50 zs,90,70,65,80,80 ss,90,70,65,80,90 zz,54,65,70,66,70 如果是这样子,结果就是5 WWWWA 2008年12月05日 13点53分37秒 说: SELECT sum(if(cj1=70,1,0))+sum(if(cj2=70,1,0))+ sum(if(cj3=70,1,0))+sum(if(cj4=70,1,0))+sum(if(cj5=70,1,0)) from ff2 KyoUs 2008年12月05日 13点59分53秒 说: 结果应该是: 90:4 70:5 65:4 80:4 50:1 54:1 66:1 WWWWA 2008年12月05日 14点01分03秒 说: select cj1,count(*) from ( select cj1 from tt union all select cj2 from tt union all select cj3 from tt union all select cj4 from tt union all select cj5 from tt) a group by cj1KyoUs 2008年12月05日 14点04分42秒 说:能不能稍微解释一下? 我怎么感觉,这样子写的话,只能把cj1字段出现过的数字汇总啊。 WWWWA 2008年12月05日 14点07分22秒 说: NO,将CJ1-CJ5的内容从行->列,CJ1只是取一个字段名的作用,内容是CJ1-CJ5,你可以看看 KyoUs 2008年12月05日 14点24分37秒 说: a,是合成的新表? WWWWA 2008年12月05日 14点27分20秒 说: 虚拟表的别名 KyoUs 2008年12月05日 14点30分11秒 说: 哦哦。是说,还以为和 a group by cj1是一句呢。不好意思,我没有运行环境,只能模拟着理解。而且本来也不懂SQL 还是不太懂 select cj1,count(*)这一句,cj1,本身有什么作用吗?如果有虚拟表a了,是不是这个cj1本身,也可以随便写? WWWWA 2008年12月05日 14点36分06秒 说: 1、建议你看看SQL的格式、要求; 2、select cj1,count(*):按CJ1字段名分组,CJ1是一个字段名,内容CJ1-CJ5 CJ1可以重新取名。 KyoUs 2008年12月05日 15点01分24秒 说: 1,再次感激 2,事很急,只能麻烦你了。以问代看了。 3,我模拟一下运行状态,问问不理解的地方 ----------------------------------- select cj1 from tt union all select cj2 from tt union all select cj3 from tt union all select cj4 from tt union all select cj5 from tt) a --------------------- 生成一个虚拟表a,结构是 cj1一个字段,里面存了tt表中,cj1-cj5字段所有数据 表达起来就是 cj1 70 60 89 79 69 60.. 这样子 然后再结合 select cj1,count(*) from a ,可以统计cj1,一共有多少数据 加上 group by cj1 后,就可以统计,相同的数据分别有多少了? 那么,a表中cj1这个字段,是因为合并时,第一条是select cj1 from tt,所以才是cj1的吗? 比如别人这个例子中,最后一个运行结果中的name字段 SQL> select * from a; ID NAME ---------- ---------- 1 aa 2 bb 3 cc 6 dd 7 ee SQL> select * from b; ID ADDR ---------- ---------- 1 aa 2 bb 3 cc 4 dd 5 ee SQL> select * from a 2 union all 3 select * from b; ID NAME ---------- ---------- 1 aa 2 bb 3 cc 6 dd 7 ee 1 aa 2 bb 3 cc 4 dd -------------------- 专家还没回答。。可是问题太幼稚了。
TRY:
SELECT 科目,成绩,COUNT(*)
FROM TT GROUP BY 科目,成绩
数据表name,cj1,cj2,cj3,cj4.....cj10
xx,90,70,65,80,......50
zs,90,70,65,80,......80
ss,90,70,65,80,......90
zz,54,65,70,66,......70
结果要求统计出,70,在整个表中,出现了多少次
table: studentID,chinese,english,maths,.....SQL:
select studentID,sum(ifnull(chinese,0)+ifnull(english,0)+ifnull(...,0)+...) as totalScode,sum(if(ifnull(chinese,-1)>=0,1,0)+if(ifnull(english,-1)>=0,1,0)+if(ifnull(...,-1)>=0,1,0)+...) as totalNum from table ;
select sum(if(cj1=70,1,0)+if(cj2=70,1,0)+if(cj3=70,1,0)+...+if(cj9=70,1,0)+if(cj10=70,1,0)) as totalnum70 from table where 1 group by 1
数据表 name,cj1,cj2,cj3,cj4.....cj10
xx,90,70,65,80,......50
zs,90,70,65,80,......80
ss,90,70,65,80,......90
zz,54,65,70,66,......70
KyoUs 2008年12月05日 13点49分47秒 说:
不好意思,我只是举个例子,我还没有数据库呢
是从cj1-cj10中选择
KyoUs 2008年12月05日 13点50分40秒 说:
name,cj1,cj2,cj3,cj4,cj5
xx,90,70,65,80,50
zs,90,70,65,80,80
ss,90,70,65,80,90
zz,54,65,70,66,70
如果是这样子,结果就是5
WWWWA 2008年12月05日 13点53分37秒 说:
SELECT sum(if(cj1=70,1,0))+sum(if(cj2=70,1,0))+
sum(if(cj3=70,1,0))+sum(if(cj4=70,1,0))+sum(if(cj5=70,1,0)) from ff2
KyoUs 2008年12月05日 13点59分53秒 说:
结果应该是:
90:4
70:5
65:4
80:4
50:1
54:1
66:1
WWWWA 2008年12月05日 14点01分03秒 说:
select cj1,count(*) from (
select cj1 from tt
union all
select cj2 from tt
union all
select cj3 from tt
union all
select cj4 from tt
union all
select cj5 from tt) a
group by cj1KyoUs 2008年12月05日 14点04分42秒 说:能不能稍微解释一下?
我怎么感觉,这样子写的话,只能把cj1字段出现过的数字汇总啊。
WWWWA 2008年12月05日 14点07分22秒 说:
NO,将CJ1-CJ5的内容从行->列,CJ1只是取一个字段名的作用,内容是CJ1-CJ5,你可以看看
KyoUs 2008年12月05日 14点24分37秒 说:
a,是合成的新表?
WWWWA 2008年12月05日 14点27分20秒 说:
虚拟表的别名
KyoUs 2008年12月05日 14点30分11秒 说:
哦哦。是说,还以为和 a group by cj1是一句呢。不好意思,我没有运行环境,只能模拟着理解。而且本来也不懂SQL 还是不太懂 select cj1,count(*)这一句,cj1,本身有什么作用吗?如果有虚拟表a了,是不是这个cj1本身,也可以随便写?
WWWWA 2008年12月05日 14点36分06秒 说:
1、建议你看看SQL的格式、要求;
2、select cj1,count(*):按CJ1字段名分组,CJ1是一个字段名,内容CJ1-CJ5
CJ1可以重新取名。
KyoUs 2008年12月05日 15点01分24秒 说:
1,再次感激
2,事很急,只能麻烦你了。以问代看了。
3,我模拟一下运行状态,问问不理解的地方
-----------------------------------
select cj1 from tt
union all
select cj2 from tt
union all
select cj3 from tt
union all
select cj4 from tt
union all
select cj5 from tt) a
---------------------
生成一个虚拟表a,结构是 cj1一个字段,里面存了tt表中,cj1-cj5字段所有数据 表达起来就是
cj1
70
60
89
79
69
60.. 这样子
然后再结合 select cj1,count(*) from a ,可以统计cj1,一共有多少数据
加上 group by cj1 后,就可以统计,相同的数据分别有多少了? 那么,a表中cj1这个字段,是因为合并时,第一条是select cj1 from tt,所以才是cj1的吗?
比如别人这个例子中,最后一个运行结果中的name字段
SQL> select * from a; ID NAME
---------- ----------
1 aa
2 bb
3 cc
6 dd
7 ee SQL> select * from b; ID ADDR
---------- ----------
1 aa
2 bb
3 cc
4 dd
5 ee SQL> select * from a
2 union all
3 select * from b; ID NAME
---------- ----------
1 aa
2 bb
3 cc
6 dd
7 ee
1 aa
2 bb
3 cc
4 dd
--------------------
专家还没回答。。可是问题太幼稚了。
2 bb
3 cc
6 dd
7 ee
1 aa
2 bb
3 cc
4 dd
5 ee
数据表 name,cj1,cj2,cj3,cj4.....cj10
xx,90,70,65,80,......50
zs,90,70,65,80,......80
ss,90,70,65,80,......90
zz,54,65,70,66,......70
KyoUs 2008年12月05日 13点49分47秒 说:
不好意思,我只是举个例子,我还没有数据库呢
是从cj1-cj10中选择
KyoUs 2008年12月05日 13点50分40秒 说:
name,cj1,cj2,cj3,cj4,cj5
xx,90,70,65,80,50
zs,90,70,65,80,80
ss,90,70,65,80,90
zz,54,65,70,66,70
如果是这样子,结果就是5
WWWWA 2008年12月05日 13点53分37秒 说:
SELECT sum(if(cj1=70,1,0))+sum(if(cj2=70,1,0))+
sum(if(cj3=70,1,0))+sum(if(cj4=70,1,0))+sum(if(cj5=70,1,0)) from ff2
KyoUs 2008年12月05日 13点59分53秒 说:
结果应该是:
90:4
70:5
65:4
80:4
50:1
54:1
66:1
WWWWA 2008年12月05日 14点01分03秒 说:
select cj1,count(*) from (
select cj1 from tt
union all
select cj2 from tt
union all
select cj3 from tt
union all
select cj4 from tt
union all
select cj5 from tt) a
group by cj1KyoUs 2008年12月05日 14点04分42秒 说:能不能稍微解释一下?
我怎么感觉,这样子写的话,只能把cj1字段出现过的数字汇总啊。
WWWWA 2008年12月05日 14点07分22秒 说:
NO,将CJ1-CJ5的内容从行->列,CJ1只是取一个字段名的作用,内容是CJ1-CJ5,你可以看看
KyoUs 2008年12月05日 14点24分37秒 说:
a,是合成的新表?
WWWWA 2008年12月05日 14点27分20秒 说:
虚拟表的别名
KyoUs 2008年12月05日 14点30分11秒 说:
哦哦。是说,还以为和 a group by cj1是一句呢。不好意思,我没有运行环境,只能模拟着理解。而且本来也不懂SQL 还是不太懂 select cj1,count(*)这一句,cj1,本身有什么作用吗?如果有虚拟表a了,是不是这个cj1本身,也可以随便写?
WWWWA 2008年12月05日 14点36分06秒 说:
1、建议你看看SQL的格式、要求;
2、select cj1,count(*):按CJ1字段名分组,CJ1是一个字段名,内容CJ1-CJ5
CJ1可以重新取名。
KyoUs 2008年12月05日 15点01分24秒 说:
1,再次感激
2,事很急,只能麻烦你了。以问代看了。
3,我模拟一下运行状态,问问不理解的地方
-----------------------------------
select cj1 from tt
union all
select cj2 from tt
union all
select cj3 from tt
union all
select cj4 from tt
union all
select cj5 from tt) a
---------------------
生成一个虚拟表a,结构是 cj1一个字段,里面存了tt表中,cj1-cj5字段所有数据 表达起来就是
cj1
70
60
89
79
69
60.. 这样子
然后再结合 select cj1,count(*) from a ,可以统计cj1,一共有多少数据
加上 group by cj1 后,就可以统计,相同的数据分别有多少了? 那么,a表中cj1这个字段,是因为合并时,第一条是select cj1 from tt,所以才是cj1的吗?
比如别人这个例子中,最后一个运行结果中的name字段
SQL> select * from a; ID NAME
---------- ----------
1 aa
2 bb
3 cc
6 dd
7 ee SQL> select * from b; ID ADDR
---------- ----------
1 aa
2 bb
3 cc
4 dd
5 ee SQL> select * from a
2 union all
3 select * from b; ID NAME
---------- ----------
1 aa
2 bb
3 cc
6 dd
7 ee
1 aa
2 bb
3 cc
4 dd
--------------------
专家还没回答。。可是问题太幼稚了。