學生各門課程成績統計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.stuscore3.計算每個人單科的最高成績(要求顯示欄位: 學號,姓名,課程,最高成績)group by name,stuid order by allscore;
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:通過索引,唯一約束,主鍵約束或標識