选出每个班级总分前三的记录

要求:选出每个班级总分前三的记录

或:分组后选择每组前三的记录


有表结构如下:

name为姓名,class为班级,score为分数,subject为科目。


示例数据如下:

数据未完全列出。。


要求:一条SQL语句选择出每个班级总分排名前三的记录。

直接上代码:

select name,class,score from
(  
select name,class,score, row_number() over (partition by class order by score desc) rn from
  (
    select t.name,t.class,sum(t.score) score from ZENGTEST t group by t.name,t.class
    order by t.class,score desc    
  )  
) where rn < 4;


关键函数:row_number() over (partition by class order by score desc)



``` #include <iostream> #include <cstdio> using namespace std; int n; int a[107]; int dp[107][10007]; int sum; inline int maxa(int a, int b) { if (a > b) return a; return b; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i ++) { scanf("%d", &a[i]); sum += a[i]; } dp[0][0] = 1; for (int i = 1; i <= n; i ++) { for (int j = i; j >= 1; j --) { for (int k = sum >> 1; k >= a[i]; k --) dp[j][k] |= dp[j - 1][k - a[i]]; } } for (int i = sum >> 1; i >= 0; i --) { if (dp[n >> 1][i]) { printf("%d\n", i); return 0; } } }```# P2663 越越的组队 ## 题目描述 班级要组织一场综合能力竞赛,班里共有 $n$ 位学生,将分成两队互相竞争。 老师找到了越越并给了越越一张全班同学综合能力测试的成绩,要求他从全班同学中选出**一半**,并要求这些同学综合能力测试的成绩之和在**不超过班级总分一半**的提下尽量达到最高。这样分成的两队实力是最平均的。越越堆着满脸的笑容找到了你,你就帮他写一个程序吧。 ## 输入格式 第一行有一个整数,表示班级的学生人数 $n$。 第 $2$ 到第 $(n + 1)$ 行,每行一个整数,第 $(i + 1)$ 行的整数 $a_i$ 表示第 $i$ 位同学的成绩。 ## 输出格式 输出一行一个整数表示答案。 ## 输入输出样例 #1 ### 输入 #1 ``` 8 77 77 56 77 84 77 56 46 ``` ### 输出 #1 ``` 273 ``` ## 说明/提示 #### 样例 1 解释 班级总分为 $550$,总分的一半是 $275$,选则成绩分别为 $56,77,84,56$ 的同学可以达到总分 $273$,是不超过 $275$ 的最大值。 #### 数据规模与约定 对于全部的测试点,保证 $1 \leq n \leq 100$,$0 \leq a_i \leq 100$,数据保证 $n$ 均为偶数。
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值