SQL中只对某两个字段进行分组,但我想得到其他字段而其他字段不写在GroupBy后,怎么做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中只对某两个字段进行分组,但我想得到其他字段而其他字段不写在GroupBy后,怎么做相关的知识,希望对你有一定的参考价值。

如果其他字段的值都是一样的,那就用max或者min
如果是数字,并且需要计算,就用聚合函数
如果是其他的,那最好是先把分组的字段先取出来做一张临时表再和原表关联取得其他的值。
参考技术A 使用嵌套select语句,外层not in内层,内层使用GroupBy。

sql对一个字段进行分组 怎么显示多个字段

select IteID,count(IteID) WrongCount from Exam_ItemListWrong_View
where IsKeyTrue=2 and UserId in
(select UserId from Sys_UserInfo where classid in
(select ParameterValue from Sys_UserParameter where U_ID=60))
group by IteID order by WrongCount desc
这样是可以的 但只能显示一个字段 我还需要显示同一张表里其他的字段
怎么才能做到呢?

select X.*,WrongCount
from Exam_ItemListWrong_View X,(select IteID,count(IteID) WrongCount from Exam_ItemListWrong_View
where IsKeyTrue=2 and UserId in
(select UserId from Sys_UserInfo where classid in
(select ParameterValue from Sys_UserParameter where U_ID=60))
group by IteID) AS Y
WHERE X.ITEID=Y.ITEID
order by WrongCount desc
这样也不行 会显示重复数据

    SQL 分组关键字 Group by 

    在汇总,求和,等函数中可以出现多字段

    假如定义一个表 A,表中有字段 a nvarchar 类型,b 字段int 类型

    select a,sum(b) as b from A

    group by a

    上列SQL就是对一个字段分组,但是取多个字段数据

参考技术A SELECT "最高分",student.*
FROM student ,(SELECT MAX(score) AS score,`subject` FROM student GROUP BY `subject`)b
WHERE student.`score` = b.score
AND student.`subject` = b.subject
UNION
SELECT "最低分",student.*
FROM student ,(SELECT MIN(score) AS score,`subject` FROM student GROUP BY `subject`)b
WHERE student.`score` = b.score
AND student.`subject` = b.subject;

亲试可行,推荐这种,可以看看,容易理解

参考技术B SELECT COL1,COL2,COL3,TEST
FROM TABLENAME X,(SELECT COL1,COUNT(COL1) AS TEST GROUP BY COL1)AS Y WHERE X.COL1=Y.COL1 只有上面这种方法。GROUP BY 必须按SELECT后不是聚合函数的所有字段分组。追问

这样也不行啊 会报错
(除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。)

追答

select X.*,WrongCount
from Exam_ItemListWrong_View X,(select IteID,count(IteID) WrongCount from Exam_ItemListWrong_View
where IsKeyTrue=2 and UserId in
(select UserId from Sys_UserInfo where classid in
(select ParameterValue from Sys_UserParameter where U_ID=60))
group by IteID) AS Y
WHERE X.ITEID=Y.ITEID
order by WrongCount desc

追问

这样还是不行  会有重复数据 

追答

我看你图了、你不是要全部字段吗?而且没有重复啊。整个字段一模一样才叫重复。
否则你按那几个属性值相同的字段分组、这样结果就不对了。
你把select 后面加distinct去重复
select distinct X.*,WrongCount

本回答被提问者和网友采纳
参考技术C 首先你题目不是很明确我理解的是这样:
SELECT COL1,COUNT(COL2),COUNT(3) FROM TABLENAME GROUP BY COL1追问

不是这样的 这样可以吗
SELECT COL1,COL2,COL3, COUNT(COL1) FROM TABLENAME GROUP BY COL1

追答

这样肯定不可以,你前面出现了后面group by也要出现

参考技术D 你的要求是不会有答案的,要不你需要显示的字段也参加分组

以上是关于SQL中只对某两个字段进行分组,但我想得到其他字段而其他字段不写在GroupBy后,怎么做的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 分组 拼接其他字段

如何在 PostgreSQL 中只使用一个字段进行分组?

SQL中查询多个字段时,GROUP BY 要怎么使用?

sql实现多字段求和并查询

SQL语句对某字段去重?

在Oracle SQL中,只对特定条件下的字段进行求和。