select取多个字段但是只针对一个字段分组合计

nana_e 2019-08-08 05:44:01
select取多个字段但是只针对一个字段分组合计怎么写?脑袋都要大了因为需要取多个字段结果,又有sum合计,所以得group by所有单字段。这样根本就达到按一个字段分组合计另一个字段的效果
...全文
2820 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
u012206779 2019-08-15
  • 打赏
  • 举报
回复
把你查询的结果作为表然后嵌套查询
  • 打赏
  • 举报
回复
Group by你的字段
datafansbj 2019-08-12
  • 打赏
  • 举报
回复
估计楼主还是没明白 Grouop by 的精髓,简易楼主先弄明白吧。 Group by 是分组,即将相同字段的值进行合并,得到一条记录。但是其他字段的值也得合并,怎么合并?只能使用Sum、AVG、Max、Min、Count 等聚合函数(或自己写聚合函数)。 类似于问题:把班级里数学90分的学生找出来,要一个男生、一个女生。 人可以理解这句话:随便找一个得分90分的男生和女生 计算机不能理解:什么是随便?对不起,给的条件不充分、不严谨,我做不到。
stelf 2019-08-12
  • 打赏
  • 举报
回复
随机找一个也有随机的办法,关键是随机的是不是想要的结果?
引用 32 楼 datafansbj 的回复:
估计楼主还是没明白 Grouop by 的精髓,简易楼主先弄明白吧。 Group by 是分组,即将相同字段的值进行合并,得到一条记录。但是其他字段的值也得合并,怎么合并?只能使用Sum、AVG、Max、Min、Count 等聚合函数(或自己写聚合函数)。 类似于问题:把班级里数学90分的学生找出来,要一个男生、一个女生。 人可以理解这句话:随便找一个得分90分的男生和女生 计算机不能理解:什么是随便?对不起,给的条件不充分、不严谨,我做不到。
溢氵 2019-08-11
  • 打赏
  • 举报
回复
SELECT 列, (SELECT "count"(*) FROM table GROUP BY 列) AS total FROM table
datafansbj 2019-08-09
  • 打赏
  • 举报
回复
只分组一个字段,其他字段如何取?这是一个不严谨的操作,因此 SQL 不存在这种直接的写法。比如分组字段相同的,其他字段存在不同的值,那么其他字段取哪个值?系统没那么智能,你必须自己决定如何取。你可以这样取: select Field1, Max(Field2) as Field2, Max(Field3) as Field3 from xxx group by Field1
  • 打赏
  • 举报
回复 1
引用 19 楼 nana_e 的回复:
[quote=引用 13 楼 逝水流年风萧兮 的回复:]
[quote=引用 8 楼 nana_e 的回复:]
[quote=引用 7 楼 二月十六的回复:]5楼写了,参考一下。

不行,虽然没有报错,但是出来的合计数不对,而且有多条数据,没有分组合计效果[/quote]
有多条数据那就在查的时候再分一次组呗,select 后面再加上distinct on (列名1,列名2)[/quote]select后面加distinct on提示关键字on语法错误[/quote]
我忘了sqlserver没有distinct on,你的这种情况去掉重复数据可以这样子试试,使用ROW_NUMBER() OVER

CREATE TABLE student(
id int identity (1,1) primary key NOT NULL,
"name" varchar(10),
course varchar(10),
score int,
sex varchar(6),
grade varchar(10)
);

INSERT INTO student(name,course,score,sex,grade)
VALUES('张三','语文',60,'男','一年级');
INSERT INTO student(name,course,score,sex,grade)
VALUES('张三','数学',60,'男','一年级');
INSERT INTO student(name,course,score,sex,grade)
VALUES('张三','语文',70,'男','二年级');
INSERT INTO student(name,course,score,sex,grade)
VALUES('张三','数学',70,'男','二年级');
INSERT INTO student(name,course,score,sex,grade)
VALUES('李四','语文',80,'男','一年级');
INSERT INTO student(name,course,score,sex,grade)
VALUES('李四','数学',80,'男','一年级');
INSERT INTO student(name,course,score,sex,grade)
VALUES('李四','语文',90,'男','二年级');
INSERT INTO student(name,course,score,sex,grade)
VALUES('李四','数学',90,'男','二年级');


--这条是类似你现在的情况
--SELECT *,SUM(score) OVER(PARTITION BY name,course) AS sum_score FROM student;

--估计你最终想要的结果
SELECT * FROM (
SELECT *,SUM(score) OVER(PARTITION BY name,course) AS sum_score,ROW_NUMBER() OVER(PARTITION BY name,course ORDER BY name) AS autoId FROM student
) AS temp WHERE temp.autoId = 1;
二月十六 2019-08-09
  • 打赏
  • 举报
回复
结贴了……弄明白了吗? 不是不想帮你,是想帮你但用不上劲儿,气人 要是弄完了就拉倒,没弄完就最后再说一下 这一步一步的基本上也问的差不多你想要啥了,最后金额想要哪个?
二月十六 2019-08-09
  • 打赏
  • 举报
回复
引用 26 楼 nana_e 的回复:
[quote=引用 25 楼 二月十六 的回复:] 你问个问题都问不明白,你就不能给出来想要什么结果?怎么这么费劲,一直描述描述,直接给结果能怎么着? 你看和你要了多少次你的测试数据和想要的结果就是不知道给 想帮你都没法,不告诉我们你想要啥啊。 你就说你有 id name 1 张三 2 李四 想要得到 count 2 就这么个测试数据和对应结果,这多清楚啊,你总在哪描述描述,谁明白你说的是啥,谁帮你吧
这个图片能看清楚吗?同样的指标ID只显示一条数据这样[/quote] 这根本就看不明白,你只说同样的指标ID只显示一条数据这样,我们怎么知道显示哪一条?有两条同样ID的,是显示金额少的,还是显示排在前边的,还是怎么个显示规则,你不说谁知道?? 你要是给出来最后的结果想要 部门 指标Id ...... 金额 办公室 187 146879 办公室 188 21545 我们就知道想要什么了,就这个结果你就不会写出来???
nana_e 2019-08-09
  • 打赏
  • 举报
回复
引用 25 楼 二月十六 的回复:
你问个问题都问不明白,你就不能给出来想要什么结果?怎么这么费劲,一直描述描述,直接给结果能怎么着?
你看和你要了多少次你的测试数据和想要的结果就是不知道给








想帮你都没法,不告诉我们你想要啥啊。

你就说你有
id name
1 张三
2 李四

想要得到
count
2

就这么个测试数据和对应结果,这多清楚啊,你总在哪描述描述,谁明白你说的是啥,谁帮你吧
这个图片能看清楚吗?同样的指标ID只显示一条数据这样
二月十六 2019-08-09
  • 打赏
  • 举报
回复
你问个问题都问不明白,你就不能给出来想要什么结果?怎么这么费劲,一直描述描述,直接给结果能怎么着? 你看和你要了多少次你的测试数据和想要的结果就是不知道给 想帮你都没法,不告诉我们你想要啥啊。 你就说你有 id name 1 张三 2 李四 想要得到 count 2 就这么个测试数据和对应结果,这多清楚啊,你总在哪描述描述,谁明白你说的是啥,谁帮你吧
nana_e 2019-08-09
  • 打赏
  • 举报
回复
引用 22 楼 二月十六 的回复:
SELECT TOP 1 * FROM (你的查询语句)t
这个语句是只取第一条数据是吧
nana_e 2019-08-09
  • 打赏
  • 举报
回复
引用 22 楼 二月十六 的回复:
SELECT TOP 1 * FROM (你的查询语句)t
大神,你这个语句只显示了一条,我是想说按几个字段分组
二月十六 2019-08-09
  • 打赏
  • 举报
回复
SELECT TOP 1 * FROM (你的查询语句)t
nana_e 2019-08-09
  • 打赏
  • 举报
回复
引用 20 楼 nana_e 的回复:
引用 18 楼 二月十六 的回复:
引用 17 楼 nana_e 的回复:
引用 11 楼 二月十六 的回复:
性别年纪应该和姓名唯一对应的,放到group by应该也没问题啊,建议给出测试数据和对应的结果。
这个是我写的语句和结果,多条数据,怎么按某几个字段组合成查出一条数据
最后结果想要什么样的?具体的写出来,你只说要一条数据,那直接top 1就可以了。
top 1放在select后面,再把要取的字段值括号起来?但是报错哈
想要的效果是一个部门一个指标一个资金性质一个项目就显示出一条数据
nana_e 2019-08-09
  • 打赏
  • 举报
回复
引用 18 楼 二月十六 的回复:
引用 17 楼 nana_e 的回复:
引用 11 楼 二月十六 的回复:
性别年纪应该和姓名唯一对应的,放到group by应该也没问题啊,建议给出测试数据和对应的结果。
这个是我写的语句和结果,多条数据,怎么按某几个字段组合成查出一条数据
最后结果想要什么样的?具体的写出来,你只说要一条数据,那直接top 1就可以了。
top 1放在select后面,再把要取的字段值括号起来?但是报错哈
nana_e 2019-08-09
  • 打赏
  • 举报
回复
引用 13 楼 逝水流年风萧兮 的回复:
[quote=引用 8 楼 nana_e 的回复:]
[quote=引用 7 楼 二月十六的回复:]5楼写了,参考一下。

不行,虽然没有报错,但是出来的合计数不对,而且有多条数据,没有分组合计效果[/quote]
有多条数据那就在查的时候再分一次组呗,select 后面再加上distinct on (列名1,列名2)[/quote]select后面加distinct on提示关键字on语法错误
二月十六 2019-08-09
  • 打赏
  • 举报
回复
引用 17 楼 nana_e 的回复:
引用 11 楼 二月十六 的回复:
性别年纪应该和姓名唯一对应的,放到group by应该也没问题啊,建议给出测试数据和对应的结果。
这个是我写的语句和结果,多条数据,怎么按某几个字段组合成查出一条数据
最后结果想要什么样的?具体的写出来,你只说要一条数据,那直接top 1就可以了。
nana_e 2019-08-09
  • 打赏
  • 举报
回复
引用 11 楼 二月十六 的回复:
性别年纪应该和姓名唯一对应的,放到group by应该也没问题啊,建议给出测试数据和对应的结果。
这个是我写的语句和结果,多条数据,怎么按某几个字段组合成查出一条数据
nana_e 2019-08-09
  • 打赏
  • 举报
回复
引用 13 楼 逝水流年风萧兮 的回复:
[quote=引用 8 楼 nana_e 的回复:]
[quote=引用 7 楼 二月十六的回复:]5楼写了,参考一下。

不行,虽然没有报错,但是出来的合计数不对,而且有多条数据,没有分组合计效果[/quote]
有多条数据那就在查的时候再分一次组呗,select 后面再加上distinct on (列名1,列名2)[/quote]这个是我写的语句和结果,多条数据,怎么按某几个字段组合成查出一条数据
加载更多回复(14)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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