1. 程式人生 > >學生各門課程成績統計SQL語句大全(面試題)

學生各門課程成績統計SQL語句大全(面試題)

http://www.cnblogs.com/lsgcoder101/p/6011059.html

建立表

複製程式碼
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[stuscore]
( [name] [varchar](50)   COLLATE Chinese_PRC_CI_AS   NULL,    
[subject] [varchar](50)   COLLATE Chinese_PRC_CI_AS   NULL,    
[score] [int]   NULL,   
[stuid
] [int] NULL) ON [PRIMARY] GO SET ANSI_PADDING OFF
複製程式碼

插入資料

insert into dbo.stuscore values ('張三','數學',89,1);
insert into dbo.stuscore values ('張三','語文',80,1);
insert into dbo.stuscore values ('張三','英語',70,1);
insert into dbo.stuscore values ('李四','數學',90,2);
insert into dbo.stuscore values ('李四','
語文',70,2); insert into dbo.stuscore values ('李四','英語',80,2);

查詢結果顯示,如下截圖:

問題: 1.計算每個人的總成績並排名(要求顯示欄位:姓名,總成績) 
select name,SUM(score) as allscore from dbo.stuscore
group by name 
order by allscore;

2.計算每個人的總成績並排名(要求顯示欄位: 學號,姓名,總成績) 

select stuid,name,SUM(score) as allscore from dbo.stuscore 
group by name,stuid order by allscore;
3.計算每個人單科的最高成績(要求顯示欄位: 學號,姓名,課程,最高成績)
select t1.stuid,t1.name,t1.subject,t1.score from stuscore t1,
(select stuid,max(score) as maxscore from stuscore group by stuid) t2 
where t1.stuid=t2.stuid and t1.score=t2.maxscore;
4.計算每個人的平均成績(要求顯示欄位: 學號,姓名,平均成績)
select stuid,name,AVG(score) avgscore from dbo.stuscore 
group by stuid,name;
5.列出各門課程成績最好的學生(要求顯示欄位: 學號,姓名,科目,成績) 
select t1.stuid,t1.name,t1.subject,t1.score from stuscore t1,(
select subject,MAX(score) as maxscore from stuscore group by subject)t2
where t1.subject = t2.subject and t1.score = t2.maxscore;
6.列出各門課程成績最好的兩位學生(要求顯示欄位: 學號,姓名,科目,成績) 
select  t1.* from stuscore t1 where t1.stuid in (
select top 2 stuid from stuscore where subject = t1.subject order by score desc)
order by t1.subject;
7.統計如下: 
學號 姓名 語文 數學 英語 總分 平均分
select stuid 學號,name 姓名,sum(case when subject='語文' then score else 0 end )as 語文,
sum(case when subject='數學' then score else 0 end )as 數學,
sum(case when subject='英語' then score else 0 end )as 英語,
SUM(score)總分,avg(score)平均分 from stuscore
group by stuid,name order by 總分;
8.列出各門課程的平均成績(要求顯示欄位:課程,平均成績)
select subject,AVG(score)平均成績 from stuscore 
group by subject;
  9.列出數學成績的排名(要求顯示欄位:學號,姓名,成績,排名)
select stuid,name,score,
(select count(*) from stuscore t1 where subject ='數學' and t1.score > t2.score)+1 as 名次 from stuscore t2  
where subject='數學' order by score desc;
 --註釋:排序,比較大小,比較的次數+1 = 排名。
  10.列出數學成績在2-3名的學生(要求顯示欄位:學號,姓名,科目,成績) 
select t3.* from (
select top 2  t2.* from (
select top 3 stuid,name,subject,score from stuscore where 
subject = '數學' order by score desc) t2 order by t2.score) t3
order by t3.score desc;
 select t3.*  from (
 select top 100 percent stuid,name,subject,score,
(select count(*) from stuscore t1 where subject ='數學' and t1.score > t2.score)+1 as 名次 from
 stuscore t2  where subject='數學' order by t2.score desc) t3 
 where t3.名次 between 2 and 3 order by t3.score desc;
 select t3.*  from (
 select stuid,name,subject,score,
(select count(*) from stuscore t1 where subject ='數學' and t1.score > t2.score)+1 as 名次 from
 stuscore t2  where subject='數學') t3 
 where t3.名次 between 2 and 3 order by t3.score desc;

後面兩個方法的不同之處可以參見:http://blog.csdn.net/wrm_nancy/article/details/17170115

11.求出李四的數學成績的排名 
declare @tmp table(pm int,name varchar(50),score int,stuid int)insert into @tmp 
select null,name,score,stuid from stuscore where subject='數學' 
order by score desc declare @id int set @id=0;
update @tmp set @id=@id+1,pm=@id select * from @tmp where name='李四'
select stuid,name,subject,score,(select count(*) from stuscore t1 where subject ='數學' and t1.score > t2.score)+1 as 名次
 from stuscore t2  where subject='數學' and name = '李四' order by score desc;
12.統計如下: 
課程 不及格(0-59)個 良(60-80)個 優(81-100)個
 select subject 科目,sum(case when score between 0 and 59 then 1 else 0 end) as 不及格,
 sum(case when score between 60 and 80 then 1 else 0 end) as 良,
 sum(case when score between 81 and 100 then 1 else 0 end) as 優秀 from stuscore
 group by subject;
13.統計如下: 數學: 張三(50分),李四(90分),王五(90分),趙六(76分) 
 declare @s nvarchar(1000)
 set @s=''
 select @s =@s+','+name+'('+convert(nvarchar(10),score)+'分)' from 
 stuscore where subject='數學'
 set @s=stuff(@s,1,1,' ')print '數學:'+@s

相關推薦

學生課程成績統計SQL語句大全(試題)

http://www.cnblogs.com/lsgcoder101/p/6011059.html 建立表 SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE

sql語句試題

中科軟的面試題:http://www.mayiwenku.com/p-5888480.html 中科軟的面試題:https://blog.csdn.net/woolceo/article/details/549413 中科軟的複試:https://www.job592.com/pay/comms16217

查詢每個學生課程成績sql server行轉列實現

本人經常寫sql server指令碼,有時需要行轉列,這裡做個筆記。 練習指令碼 -- 學生表 CREATE TABLE student ( stuid VARCHAR(16) NOT NULL, stunm VARCHAR(20) NOT NULL, PRI

查詢成績大於課程平均成績的所有學生的學號、課程號和成績

select Sno,Cno,Grade from SC x--從選修表中選擇學號、課程號、成績 WHERE Grade>(select avg(Grade)--選擇成績大於平均成績的 from SC y where y.Sno=x.Sno);--通過學號連線

查詢每課程成績都大於80分學生的姓名

 負from (select rq,count(shengfu) 勝from tab3 where shengfu='勝' group by rq) a, (select rq,count(shengfu) 負from tab3 where shengfu='負' group by rq) b wher

2.2用二維陣列實現,5個學生4課程的總分和平均分的統計工作

摩爾的Java學習筆記2.2 第二週作業: 1、實現將一組整數進行升序排列; 2、用二維陣列實現,5個學生4門課程的總分和平均分的統計工作; 3、列印八行八列楊輝三角,開頭

從鍵盤輸入6個學生5課程成績,求每個人的總分與平均分。

#include<stdio.h> int main(void) {double stu[6][5] = {{0}};double sum_avg[5] = {0};int i =0;int j = 0;double sum = 0;for(i= 0;i <

各種按日期、時間段統計SQL語句

--前一日  select * from 表名 where  datediff(d,cast(日期  as  datetime),getdate())=1  --上週 select *

檢視每課程成績的前兩名(分析函式)

有些公司業務需要檢視使用者消費的前幾名。比如xxx教育需要檢視每門課程成績的前兩名,這裡用到分析函式,注(只針對Db2   資料庫)具體sql如下:select * from (select  row_number()over(partition by 課程號 order b

有一個班4個學生5成績,要求程式設計實現把這四個學生成績按照第一課由小到大排序(冒泡法)。

#include <stdio.h> #include <stdlib.h>int main(int argc,char** argv){  int student[4][5];//記錄4個學生5門功課成績 int changeRecord[4]={0

省市資料-SqlServer版SQL語句資料

SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[Province]([ID] [int] NOT NULL,[Name] [varchar](20) N

成績錄入SQL語句 笛卡爾積 LEFT JOIN

select * from (select * from Student s,Course c ,(select distinct Year from Score) as y,(select dist

Sql語句調用變量

orm logs insert string 字符類型 style color pla blog   sql語句裏面調用變量的話有兩種情況,一種是字符類型,一種是整型、浮點型之類的數字 db1.Execute("insert DataInformation value

Sql Server】經典SQL語句大全

left 提高 status 需要 minute etime 路徑 求和 組合 一、基礎 1、說明:創建數據庫 CREATE DATABASE database-name 2、說明:刪除數據庫 drop database dbname 3、說明:備份sql

SQL語句大全

大於等於 算術 特定 per 字符 ger 選擇 小年 外連接 SQL語句實例 表操作 例 1 對於表的教學管理數據庫中的表 STUDENTS ,可以定義如下: CREATE TABLE STUDENTS (SNO NUMERIC

資料庫基本----SQL語句大全

資料庫基本 ---- SQL語句大全一、基礎     1 、說明:建立資料庫    Create DATABASE database - name   &nb

mysql sql語句大全(轉載)

原文地址:https://www.cnblogs.com/bchjazh/p/5997728.html 1、說明:建立資料庫 CREATE DATABASE database-name 2、說明:刪除資料庫 drop database dbname 3、說明:備份sql server --- 建立

經典SQL語句大全-【轉載自】部落格園,作者部落格:YuBinfeng's Technology Blog

因最近學習MySQL,閒來無事逛帖子時,發現這篇較為經典的部落格,特轉載以防備用學習,同時希望也可以幫到他人,廢話不多說,進入正文  一、基礎 1、說明:建立資料庫 CREATE DATABASE database-name 2、說明:刪除資料庫 drop data

MySQL---SQL語句大全

1、#建立資料庫 CREATE DATABASE IF NOT EXISTS databaseName; 2、#刪除資料庫 DROP DATABASE databaseName; 3、#備份sql server --- 建立 備份資料的 device USE master E

SQL語句操作資料試題

1.在SQL Server中,下列關於資料完整性的說法錯誤的是()。 (選擇一項) A:實體完整性要求表中的每一行資料都反映不同的試題,不能存在相同的資料行 B:域完整性是隻給定列的輸入有效性 C:在輸入或刪除資料行時,引用完整性約束用來保持表之間已定義的關係 D:通過索引,唯一約束,主鍵約束或標識