sql语言,有一个成绩单表,已知学生姓名,如何查询名次?
有一个score表,里面有学生名字name(是唯一的),和成绩score,给定学生姓名,如何返回他的名次呢?请告诉我sql语言怎么实现。如果能知道在CodeIgniter...
有一个score表,里面有学生名字name(是唯一的),和成绩score,给定学生姓名,如何返回他的名次呢?
请告诉我sql语言怎么实现。如果能知道在CodeIgniter里面怎么实现就更好了。
非常感谢!!
我是在PHP里面(Mysql)实现的,里面貌似没有row_id,或者rowid。 展开
请告诉我sql语言怎么实现。如果能知道在CodeIgniter里面怎么实现就更好了。
非常感谢!!
我是在PHP里面(Mysql)实现的,里面貌似没有row_id,或者rowid。 展开
11个回答
展开全部
1、创建测试表,
create table test_score(name varchar2(20), score number);
2、插入测试数据
insert into test_score values('张三', 85);
insert into test_score values('李四', 90);
insert into test_score values('王二', 95);
insert into test_score values('吴七', 83);
insert into test_score values('李六', 66);
commit;
3、查询表中全量数据,select t.*, rowid from test_score t;
4、编写sql,根据学生姓名,查询学生名词,以学生‘李四’为例,成绩排名第二; select t.* from (select t.*, rank() over(order by score desc) rk from test_score t) t where t.name = '李四';
2015-12-02 · 知道合伙人软件行家
关注
展开全部
例成绩单表有字段:学生姓名,名次
那么要查询同学A的名次,SQL语句可以这样写:
select 学生姓名,名次 from 成绩单表 where 学生姓名 = ‘同学A’
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-16
展开全部
-- 模拟 score 表.
CREATE TABLE score (
name varchar(10),
score INT
);
-- 模拟数据.
INSERT INTO score VALUES('赵小丫', 90);
INSERT INTO score VALUES('钱小丫', 80);
INSERT INTO score VALUES('孙小丫', 70);
INSERT INTO score VALUES('李小丫', 50);
INSERT INTO score VALUES('周小丫', 80);
INSERT INTO score VALUES('吴小丫', 60);
INSERT INTO score VALUES('郑小丫', 70);
INSERT INTO score VALUES('王小丫', 100);
-- 排名不连续的情况:
-- 也就是对于 80分。 钱小丫 和 周小丫 都是 第3名, 没有第4名。 孙小丫为第5名
SELECT
CASE
WHEN @AllGrade = score THEN @rank
ELSE @rank:= @rownum + 1
END AS RANK,
@rownum:=@rownum+1 AS NO,
name,
@AllGrade:=score AS score
FROM
(SELECT @rownum:=0) rn,
(SELECT @rank:=1) rk,
(SELECT @AllGrade:=0) ag,
score
ORDER BY
score DESC;
+------+------+--------+-------+
| RANK | NO | name | score |
+------+------+--------+-------+
| 1 | 1 | 王小丫 | 100 |
| 2 | 2 | 赵小丫 | 90 |
| 3 | 3 | 钱小丫 | 80 |
| 3 | 4 | 周小丫 | 80 |
| 5 | 5 | 孙小丫 | 70 |
| 5 | 6 | 郑小丫 | 70 |
| 7 | 7 | 吴小丫 | 60 |
| 8 | 8 | 李小丫 | 50 |
+------+------+--------+-------+
8 rows in set (0.00 sec)
-- 传入姓名, 查询排名的方式:
SELECT
RANK
FROM
(
SELECT
CASE
WHEN @AllGrade = score THEN @rank
ELSE @rank:= @rownum + 1
END AS RANK,
@rownum:=@rownum+1 AS NO,
name,
@AllGrade:=score AS score
FROM
(SELECT @rownum:=0) rn,
(SELECT @rank:=1) rk,
(SELECT @AllGrade:=0) ag,
score
ORDER BY
score DESC
) subQuery
WHERE
name = '孙小丫';
+------+
| RANK |
+------+
| 5 |
+------+
1 row in set (0.00 sec)
-----
-- 如果是要求 排名连续
-- 也就是对于 80分。 钱小丫 和 周小丫 都是 第3名, 孙小丫为第4名
SELECT
CASE
WHEN @AllGrade = score THEN @rank
ELSE @rank:= @rank + 1
END AS RANK,
@rownum:=@rownum+1 AS NO,
name,
@AllGrade:=score AS score
FROM
(SELECT @rownum:=0) rn,
(SELECT @rank:=1) rk,
(SELECT @AllGrade:=0) ag,
score
ORDER BY
score DESC;
+------+------+--------+-------+
| RANK | NO | name | score |
+------+------+--------+-------+
| 1 | 1 | 王小丫 | 100 |
| 2 | 2 | 赵小丫 | 90 |
| 3 | 3 | 钱小丫 | 80 |
| 3 | 4 | 周小丫 | 80 |
| 4 | 5 | 孙小丫 | 70 |
| 4 | 6 | 郑小丫 | 70 |
| 5 | 7 | 吴小丫 | 60 |
| 6 | 8 | 李小丫 | 50 |
+------+------+--------+-------+
8 rows in set (0.00 sec)
-- 传入姓名, 查询排名的方式: 处理机制参考前面的 子查询处理机制。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上回答估计顺序是反的
应该是:select row_id,name,score from 表(Score)where name="XXXXX" order by score desc(最后这个是倒叙排序)
应该是:select row_id,name,score from 表(Score)where name="XXXXX" order by score desc(最后这个是倒叙排序)
追问
没有row_id这一列啊,我用的mysql,报错:
Unknown column 'row_id' in 'field list'
rowid我也试了,也不存在
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以利用COUNT函数和SQL的嵌套查询来解决。
select count(name) from score where score >
(select score from score where name='xxx');
上面的SQL语句就是 查询出有多少个学生(名字唯一)的成绩比给定学生好
得到的结果 自然就是名次了。
select count(name) from score where score >
(select score from score where name='xxx');
上面的SQL语句就是 查询出有多少个学生(名字唯一)的成绩比给定学生好
得到的结果 自然就是名次了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询