求条统计成绩的sql

gundamff 2011-05-23 02:56:31
数据结构:

USER_ID 语文 数学 年度

1 1 0 2010

1 0 1 2011

2 0 1 2010

2 1 0 2011

3 1 1 2011

4 0 1 2010

4 0 1 2011

5 1 0 2010

5 1 0 2011

只想要 1,2,3这3种情况

写了2个SQL,执行成本都3000+,有什么好办法?


...全文
88 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gundamff 2011-05-23
  • 打赏
  • 举报
回复
感谢各位!
soso0369 2011-05-23
  • 打赏
  • 举报
回复
再有要求相信你都可以在那个基础上改了!
soso0369 2011-05-23
  • 打赏
  • 举报
回复

如果加上你刚说的两年是1,1和两年相同的不考虑,那么应该如下
select * from table_name
where user_id in
(select user_id from table_name group by user_id having sum(语文)=1 and sum(数学)=1)
gundamff 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 soso0369 的回复:]
select * from table_name
where user_id in
(select user_id from table_name group by user_id having sum(语文)+sum(数学)=2)
[/Quote]
这个不行吧,如果去年和今年 语文都是1,且数学都是0..
gundamff 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 merrill 的回复:]
select t.user_id
from table_name t
group by t.user_id
having sum(t.语文) >= 1 and sum(t.数学) >= 1
[/Quote]
这个赞,还有更好的没?
soso0369 2011-05-23
  • 打赏
  • 举报
回复

select * from table_name
where user_id in
(select user_id from table_name group by user_id having sum(语文)+sum(数学)=2)
gundamff 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 merrill 的回复:]
引用 1 楼 gelyon 的回复:


你这个是不是也不全面啊

应该这样吧
SELECT j.USER_ID FROM
(select USER_ID,语文,数学,年度 FROM 成绩 WHERE YEAR_ = 2011) j left join
(select USER_ID,语文,数学,年度 FROM 成绩 WHERE YEAR_ = 2010) q on q.USE……
[/Quote]

不全,去年2门都是1的 不考虑,还有就是去年和今天成绩相同的也不考虑
merrill 2011-05-23
  • 打赏
  • 举报
回复
select t.user_id
from table_name t
group by t.user_id
having sum(t.语文) >= 1 and sum(t.数学) >= 1
merrill 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gelyon 的回复:]

[/Quote]
你这个是不是也不全面啊

应该这样吧
SELECT j.USER_ID FROM
(select USER_ID,语文,数学,年度 FROM 成绩 WHERE YEAR_ = 2011) j left join
(select USER_ID,语文,数学,年度 FROM 成绩 WHERE YEAR_ = 2010) q on q.USER_ID=j.USER_ID
WHERE (q.语文=1 and q.数学=1) or (q.数学=1 and j.语文=1) or (j.语文=1 and j.数学=1)
or (q.语文=1 and j.数学=1)
gundamff 2011-05-23
  • 打赏
  • 举报
回复
实际上就是 2门课 2年的成绩
需要查询 2年内 2门课 都等于1的记录,这2门课任意在那一年通过无所谓
soso0369 2011-05-23
  • 打赏
  • 举报
回复
还是不明白你想要什么结果!你再说仔细点!!
gundamff 2011-05-23
  • 打赏
  • 举报
回复

SELECT j.USER_ID FROM
(select USER_ID,语文,数学,年度 FROM 成绩 WHERE YEAR_ = 2011) j left join
(select USER_ID,语文,数学,年度 FROM 成绩 WHERE YEAR_ = 2010) q on q.USER_ID=j.USER_ID
WHERE (q.语文=1 and j.数学=1) or (q.数学=1 and j.语文=1) or (j.语文=1 and j.数学=1)

这样的结果
gelyon 2011-05-23
  • 打赏
  • 举报
回复

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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