sql语句中某个字段distinct 有的字段汇总的问题

zhouboat 2018-09-29 11:10:21
姓名 性别 年龄 学号 科目 成绩
张三 男 20 1234 语文 90
张三 男 20 1234 数学 95
李四 女 20 1111 语文 92


想得到:同工号的算一个人数,这个人的年龄只算一次,应该怎么写?

select count(distinct 工号) 人数, sum(年龄) 总年龄, sum(成绩) 总成绩
这样的话,人数是对了,但年龄会重复计算了。

谢谢!
...全文
880 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zhang7613022 2018-10-08
  • 打赏
  • 举报
回复
SELECT 工号,max(年龄) as 年龄,sum(成绩) as 成绩 from table group by 工号
吉普赛的歌 版主 2018-09-29
  • 打赏
  • 举报
回复
SELECT COUNT(DISTINCT 学号)  AS 人数,
       SUM(CASE WHEN rid = 1 THEN 年龄 ELSE 0 END) AS 总年龄,
       SUM(成绩)             AS 总成绩
FROM   (
           SELECT ROW_NUMBER() OVER(PARTITION BY 学号 ORDER BY 年龄) AS rid,
                  学号,
                  年龄,
                  成绩
           FROM   t
       )  AS tt
吉普赛的歌 版主 2018-09-29
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	姓名 NVARCHAR(10),
	性别 NCHAR(1),
	年龄 INT,
	学号 INT,
	科目 NVARCHAR(10),
	成绩 INT
)
INSERT INTO t
SELECT '张三','男','20',' 1234','语文',90
UNION ALL SELECT '张三','男','20','1234','数学',95
UNION ALL SELECT '李四','女','20',' 1111','语文',92
GO
select count(distinct 学号) 人数
,(
	SELECT SUM(年龄) FROM (
		SELECT ROW_NUMBER() OVER (PARTITION BY 学号 ORDER BY 年龄) AS rid,年龄 FROM t
	) AS t WHERE rid=1
) AS 总年龄
, sum(成绩) 总成绩  
FROM t
/*
人数          总年龄         总成绩
----------- ----------- -----------
2           40          277
 */
RINK_1 2018-09-29
  • 打赏
  • 举报
回复

SELECT count(工号) as 人数,sum(年龄) as 总年龄,sum(成绩) as 总成绩 
FROM 
(SELECT 工号,年龄,sum(成绩) as 成绩 from table group by 工号,年龄) as A
卖水果的net 版主 2018-09-29
  • 打赏
  • 举报
回复
select count(distinct 工号) 人数, max(年龄) 总年龄, sum(成绩) 总成绩

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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