sql - 如何根据 SQLite 表中的总分检索排名

标签 sql sqlite

假设我有一个这样的表:

 S_id  |ca1 |ca2 |exam
  1    | 08 | 12 | 35
  1    | 02 | 14 | 32
  1    | 08 | 12 | 20
  2    | 03 | 11 | 55
  2    | 09 | 18 | 45
  2    | 10 | 12 | 35
  3    | 07 | 12 | 35
  3    | 04 | 14 | 37
  3    | 09 | 15 | 32
  4    | 03 | 11 | 55
  4    | 09 | 18 | 45
  4    | 10 | 12 | 35
  5    | 10 | 12 | 35
  5    | 07 | 12 | 35
  5    | 09 | 18 | 45

我想选择 S_id、total 并根据 sum(ca1+ca2+exam) 为每个学生分配排名,如下所示:

 S_id |total|rank
   1  | 158 | 5
   2  | 198 | 1
   3  | 165 | 4
   4  | 198 | 1
   5  | 183 | 3

如果有相同的总数,比如 S_id 2 和 S_id 4 排名为 1,我希望排名跳到 3。

感谢您的帮助。

最佳答案

制作表格:

sqlite> create table t (S_id, ca1, ca2, exam);
sqlite> insert into t values 
   ...> ( 1 , 08 , 12 , 35 ),
   ...> ( 1 , 02 , 14 , 32 ),
   ...> ( 1 , 08 , 12 , 20 ),
   ...> ( 2 , 03 , 11 , 55 ),
   ...> ( 2 , 09 , 18 , 45 ),
   ...> ( 2 , 10 , 12 , 35 ),
   ...> ( 3 , 07 , 12 , 35 ),
   ...> ( 3 , 04 , 14 , 37 ),
   ...> ( 3 , 09 , 15 , 32 ),
   ...> ( 4 , 03 , 11 , 55 ),
   ...> ( 4 , 09 , 18 , 45 ),
   ...> ( 4 , 10 , 12 , 35 ),
   ...> ( 5 , 10 , 12 , 35 ),
   ...> ( 5 , 07 , 12 , 35 ),
   ...> ( 5 , 09 , 18 , 45 );

用总分制作一个临时表:

sqlite> create temp table tt
        as select S_id, sum(ca1) + sum(ca2) + sum(exam) as total
        from t group by S_id;

使用临时表计算排名:

sqlite> select s.S_id, s.total,
          (select count(*)+1 from tt as r where r.total > s.total) as rank
          from tt as s;
1|143|5
2|198|1
3|165|4
4|198|1
5|183|3

删除临时表:

sqlite> drop table tt;

附录

随着最近对 SQLite 的更改 (2015-02-09),此公式现在有效:

with tt (S_id, total) as 
   (select S_id, sum(ca1 + ca2 + exam) as total from t group by S_id)
select s.S_id, s.total,
       (select count(*)+1 from tt as r where r.total > s.total) as rank
   from tt as s;

关于sql - 如何根据 SQLite 表中的总分检索排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28377210/

相关文章:

MySQL 查询以查找每周唯一新访问者的数量

sql - 授予创建表的权限 - SQL Server

java - 使用 SQLite 数据库时我的 Activity 无法打开

Android房间插入查询

python - 使用 Python 将 SQL 信息提取到 CSV 中,结果为空白

java - HQL 按表达式排序

php - 改进比较网站的表结构设置

database - SQLite - 有数据组织吗?

mysql - 如何将大型数据库从 Heroku 导入到本地 mysql 或 sqlite3?

cocoa - Mac OS 上 SQLite 中的 EXC_BAD_ACCESS