經常會看到這樣的SQL面試題,請用一條SQL語句統計出學生的總總成績,請用一條sql語句刪除表中重復的內容,但第一條保留。最近得閑,就試著寫了這么個demo,今天來這和大家分享下,如果大家有其他的sql題也可以拿出來大家一起討論,一起分享。
先創建一個表:
CREATE TABLE [dbo].[Score](
[ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] [nvarchar](50) NULL,
[CID] [int] NULL,
[Score] [int] NULL
)
好了,兩條語句解決了兩個問題.
[ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] [nvarchar](50) NULL,
[CID] [int] NULL,
[Score] [int] NULL
)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('張三',1,60)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('張三',2,70)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('張三',3,80)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('張三',4,90)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('李四',1,60)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('李四',2,70)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('李四',3,80)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('李四',4,90)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('王五',1,60)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('王五',2,70)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('王五',3,80)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('王五',4,90)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('張三',2,70)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('張三',3,80)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('張三',4,90)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('李四',1,60)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('李四',2,70)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('李四',3,80)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('李四',4,90)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('王五',1,60)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('王五',2,70)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('王五',3,80)
INSERT INTO [Test].[dbo].[Score]([Name],[CID],[Score])VALUES('王五',4,90)
好了,準備工作做完了,下面我們來寫兩條Sql語句,解決開始提出的那兩個問題
A、統計學生的成績
select name,SUM(Score)Score from Score group by Name
B、刪除表中重復的記錄,因為這表中的name是有重復的,所以我們就直接用這表來test
delete from Score where Name in(select Name from Score group by Name having COUNT(name)>0)and IDnot in (select MIN(id) from Score group by Name having COUNT(Name)>0)