一条查询语句的追加问题,谢谢大家!

tf8439 2014-09-01 05:15:02
上次我在坛子里提问,好多大神给我回复,当时问题如下:

数据库表中有两个字段,一共假设7条数据,字段和数据如下:
name score
张三 5分
张三 4分
张三 5分
李四 3分
李四 5分
李四 5分
李四 4分
我想写出一条sql语句,能同时统计张三和李四一共分别得了多少5分,其他得分共多少,请问能实现吗?谢谢大家指点!

实际输出期望结果如下:
张三同学本学期共得5分2个,其他1个。
张三同学本学期共得5分2个,其他2个。


以下是roy_88版主大神的回复,很牛。非常感谢!我想再追问一下,如果我想算其中某位同学一共有多少次成绩(5分和非5分全算上),还有这位同学他得5分的次数占总次数的百分比是多少?应该怎么写,跪谢!


use Tempdb
go
--> -->

if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([name] nvarchar(2),[score] nvarchar(2))
Insert #T
select N'张三',N'5分' union all
select N'张三',N'4分' union all
select N'张三',N'5分' union all
select N'李四',N'3分' union all
select N'李四',N'5分' union all
select N'李四',N'5分' union all
select N'李四',N'4分' union ALL
select N'王五',N'4分' --加一条王五
Go
SELECT [name]+N'同学本学期共得5分'+RTRIM(SUM(CASE WHEN [score]=N'5分' THEN 1 ELSE 0 END))+N'个,其他'+RTRIM(SUM(CASE WHEN [score]!=N'5分' THEN 1 ELSE 0 END))+N'个' AS Display
FROM #T AS a
GROUP BY [name]
/*
李四同学本学期共得5分2个,其他2个
王五同学本学期共得5分0个,其他1个
张三同学本学期共得5分2个,其他1个
*/
...全文
201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tf8439 2014-09-02
  • 打赏
  • 举报
回复
谢谢二位的回答
freecodex 2014-09-01
  • 打赏
  • 举报
回复
引用 2 楼 lzw_0736 的回复:

SELECT [name]+N'同学本学期共得5分'+RTRIM(SUM(CASE WHEN [score]=N'5分' THEN 1 ELSE 0 END))+
N'个,其他'+RTRIM(SUM(CASE WHEN [score]!=N'5分' THEN 1 ELSE 0 END))+
N'个,共有'+RTRIM(COUNT(*))+
N'次成绩,得5分的次数占总次数的百分比是'+
RTRIM(CAST(100.0*SUM(CASE WHEN [score]=N'5分' THEN 1 ELSE 0 END)/COUNT(*) AS DECIMAL(4,2)))+N'%'
AS Display
FROM    #T AS a
GROUP BY [name]
您的思路更好些,学习了
lzw_0736 2014-09-01
  • 打赏
  • 举报
回复

SELECT [name]+N'同学本学期共得5分'+RTRIM(SUM(CASE WHEN [score]=N'5分' THEN 1 ELSE 0 END))+
N'个,其他'+RTRIM(SUM(CASE WHEN [score]!=N'5分' THEN 1 ELSE 0 END))+
N'个,共有'+RTRIM(COUNT(*))+
N'次成绩,得5分的次数占总次数的百分比是'+
RTRIM(CAST(100.0*SUM(CASE WHEN [score]=N'5分' THEN 1 ELSE 0 END)/COUNT(*) AS DECIMAL(4,2)))+N'%'
AS Display
FROM    #T AS a
GROUP BY [name]
freecodex 2014-09-01
  • 打赏
  • 举报
回复
CREATE TABLE #t
(
NAME NVARCHAR(32),
score INT
)

INSERT INTO #t(name,score) VALUES(N'张三',5)
INSERT INTO #t(name,score) VALUES(N'张三',4)
INSERT INTO #t(name,score) VALUES(N'张三',5)

INSERT INTO #t(name,score) VALUES(N'李四',3)
INSERT INTO #t(name,score) VALUES(N'李四',5)
INSERT INTO #t(name,score) VALUES(N'李四',5)
INSERT INTO #t(name,score) VALUES(N'李四',4)


SELECT t1.NAME, t1.FiveScoreCounter,CAST(t1.FiveScoreCounter * 1.0 / t2.SumCounter AS DECIMAL(12,4)) 'ratio' FROM (
SELECT NAME ,COUNT(NAME) 'FiveScoreCounter' FROM #t WHERE score = 5
GROUP BY NAME)t1 INNER JOIN
(SELECT NAME,COUNT(NAME) 'SumCounter' FROM #t GROUP BY NAME)t2 ON t1.NAME = t2.name
ORDER BY t1.NAME

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧