问一个Sqlite的sql问题-根据字段A的值对字段B分别汇总

coolsky 2009-05-15 05:36:31
Sqlite中,有一个表table, 有四个字段,数据如下:
student subject score date
zhangsan 语文 90 20080101
zhangsan 语文 56 20080701
zhangsan 语文 59 20070901
zhangsan 数学 90 20080101
zhangsan 数学 70 20080901
zhangsan 数学 88 20090101
lisi 数学 90 20090101


怎么根据student, subject进行汇总,查找2007010之后的成绩,得出如下数据:

student avg(数学score) avg(语文score)
zhangsan 86 77
lisi 90 0


就是汇总之后行变列,数学语文的列固定
...全文
238 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
diy2005 2010-03-31
  • 打赏
  • 举报
回复
好戏 学习了
xiaokang007 2010-02-21
  • 打赏
  • 举报
回复
引用 12 楼 steptodream 的回复:
引用 1 楼 coolsky 的回复:写完就想起来了,谁快接分。。。
我响应你的号召来了


粉丝 多多哦
steptodream 2010-02-15
  • 打赏
  • 举报
回复
引用 1 楼 coolsky 的回复:
写完就想起来了,谁快接分。。。

我响应你的号召来了
bamboo2000 2010-02-05
  • 打赏
  • 举报
回复
select first(student),first(subject),avg(score)
from table
where date>'20070101'
group by student & subject
bamboo2000 2010-02-05
  • 打赏
  • 举报
回复
select student, avg(score)
from table
where date>'20070101'
group by subject
zhaoruifeng_good 2010-01-27
  • 打赏
  • 举报
回复
select name,
case when substr(avg( case when subject='语文' then score else 0 end),1,5) =='0.0' then '未考或者零分' else substr(avg( case when subject='语文' then score else 0 end),1,5) end as 语文,
case when substr(avg( case when subject='数学' then score else 0 end),1,5) =='0.0' then '未考或者零分' else substr(avg( case when subject='数学' then score else 0 end),1,5) end as 数学
from test group by name

看看这个 如果是零分 就显示 未考或者零分
evilevilevil 2009-11-26
  • 打赏
  • 举报
回复
求教 : 如果字段B是不定个数的怎样处理
zzmwmh 2009-06-18
  • 打赏
  • 举报
回复
回去试试看,我有一个刚好和这个差不多
WWWWA 2009-05-18
  • 打赏
  • 举报
回复
5楼代码在SQLITE 3.6.1下测试通过
wwwwb 2009-05-18
  • 打赏
  • 举报
回复
2楼确实没有测试,不知道4楼测试没有,
select student,sum(
case when subject='语文' then score else 0 end )/
sum(case when subject='语文' then 1 else 0 end ),
sum(
case when subject='数学' then score else 0 end )/
sum(case when subject='数学' then 1 else 0 end )
,sum(case when subject='语文' then 1 else 0 end )
from tt
where date>='2007010'
group by student
ACMAIN_CHM 2009-05-15
  • 打赏
  • 举报
回复

sqlite> select * from table1;
zhangsan|语文|90|20080101
zhangsan|语文|56|20080701
zhangsan|语文|59|20070901
zhangsan|数学|90|20080101
zhangsan|数学|70|20080901
zhangsan|数学|88|20090101
lisi |数学|90|20090101
sqlite> select student,
...> sum((subject='数学')*score)/sum((subject='数学')) as avg数学,
...> sum((subject='语文')*score)/sum((subject='语文')) as avg语文
...> from table1
...> where date>'2007010'
...> group by student;
lisi |90|
zhangsan|82|68
sqlite>
ACMAIN_CHM 2009-05-15
  • 打赏
  • 举报
回复

楼上的语句恐怕没测试过吧.
WWWWA 2009-05-15
  • 打赏
  • 举报
回复
select student,sum(
case when subject='语文' then score else 0 end )/count(*),
sum(
case when subject='数学',then score else 0 end )/count(*)

from tt
where date>='2007010'
group by student
coolsky 2009-05-15
  • 打赏
  • 举报
回复
写完就想起来了,谁快接分。。。

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧