group by 和 distinct 的问题

行着无疆2022-10-04 11:39:541条回答

group by 和 distinct 的问题
select a.partner as pcode, count(distinct(a.deviceid)) as count
-- into num4
from test a
where a.activationtime >= to_date('2011-4-17', 'yyyy-mm-dd')
and a.activationtime < to_date('2011-4-17', 'yyyy-mm-dd') + 1
and a.type = 2
and a.status = 1
group by a.partner
我想得到总数 ,可是.用group bu 不要的话 在统计的时候
就不会distinct 我想去除重复 然后得到结果
而且我还要分组

已提交,审核后显示!提交回复

共1条回复
qiufo6688 共回答了10个问题 | 采纳率90%
select a.partner as pcode,count(1) as count
-- into num4
from test a
where a.activationtime >= to_date('2011-4-17','yyyy-mm-dd')
and a.activationtime < to_date('2011-4-17','yyyy-mm-dd') + 1
and a.type = 2
and a.status = 1
group by a.partner
正常的count()就可以了啊
1年前

相关推荐

数据库查询时对多个字段group by 有什么作用?
数据库查询时对多个字段group by 有什么作用?
对一个字段group by获得分组数据这个能理解,但是对多个字段分组,查询的结果却差不多,就是顺序不同了而已.
那么分组的这多个字段,只有一个才是主分组字段,其余的都起了排序的作用呢?
PS:vinson_shen
按照你的解释理解,多字段分组更像是一层层的分解.
但是,实际效果是:
group by a,b,c 获得的数据集合和group by c order by a,b,c 获得的数据集合是一样的.
虽然他们的执行方式不同,但是结果却一样.
littlfive1年前1
星尘如风 共回答了18个问题 | 采纳率94.4%
"group by 字段列表"
表示根据后面的字段来分组,如果只有1个字段,那只是根据这个字段的值来进行一次分组就可以了;若后面有多个字段,那表示根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组;接着第2个字段值相同的记录中,再根据第3个字段的值进行分组.依次类推.
消息8120,级别16,状态1第1行 选择列表中的列SC.Sno无效,因为该列没有包含在聚合函数或GROUP BY 子句
消息8120,级别16,状态1第1行 选择列表中的列SC.Sno无效,因为该列没有包含在聚合函数或GROUP BY 子句求解
kangge03181年前1
刘洒江 共回答了16个问题 | 采纳率100%
当使用聚集函数的时候,必须配合group by使用.
也就是说,select 子句中的列,除了 聚合函数 ,都要在 group by中出现:
select a,b,count(*)
from tab
group by a,b
对于你的情况,把SC.Sno 放到 group by 后 试试.
oracle group by和having用法
oracle group by和having用法
这是我遇到的一道原题
Examine the description of the EMPLOYEES table:
EMP_ID NUMBER(4) NOT NULL LAST_
NAME VARCHAR2(30) NOT NULL
FIRST_NAME VARCHAR2(30)
DEPT_ID NUMBER(2)
JOB_CAT VARCHAR2(30)
SALARY NUMBER(8,2)
Which statement shows the department ID,minimum salary,and maximum salary paid in that
department,only if the minimum salary is less than 5000 and maximum salary is more than 15000?
然后给的解答是:SELECT dept_id,MIN(salary),MAX(salary)
FROM employees
GROUP BY dept_id
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
为什么这里只要group by dept_id就可以?
能通俗的为我解释一下么,group by 和having到底是怎么回事?
swindly1年前1
gebmatp 共回答了19个问题 | 采纳率94.7%
MIN(),MAX()是聚合函数.
group by 后面是要跟着的 select 中所有不是聚合函数的字段.
ex1:select count(*) from emp; //只是查询总总数 emp这张表里一共有多少条记录 所以不用group by
ex2:select count(*) ,deptno from emp group by deptno;
// 根据deptno 分组,查到的数据就是 列出 不同部门 记录总数
select count(*) ,deptno ,comm from emp group by deptno ,comm;
// 根据deptno 和 comm 分组 以此类推
group by 后面是要跟着的 select 中所有不是聚合函数的字段 否则会报错.
having 相当于where 与where的唯一区别是 当查询语句中有 聚合函数 的时候 就不能用where 了 只能用having
关于 group by 用法有一张表,数据如下 表名:xt_report_fieldaccessguid fieldna
关于 group by 用法
有一张表,
数据如下 表名:xt_report_fieldaccess
guid fieldname indate outdate
1 第一标段 2011-1-1 2011-1-2
2 第一标段 2011-1-1 2011-1-2
3 第二标段 2011-1-1 2011--1
4 第二标段 2011-1-1 2011-1-1
写了以个sql语句 查询这张表的数据 select * from xt_report_fieldaccess
显示的数据如下
1 第一标段 2011-1-1 2011-1-2
2 第一标段 2011-1-1 2011-1-2
3 第二标段 2011-1-1 2011--2
4 第二标段 2011-1-1 2011-1-2
这样话,fieldname字段就有重复的了.
我现在要想的结果是
第一标段 2011-1-1 2011-1-2
第二标段 2011-1-1 2011--2
请问下,改怎么写.是不是 select * from xt_report_fieldaccess group by filedname
htdaq1年前1
jacktcy 共回答了16个问题 | 采纳率81.3%
select fieldname,max(indate),max(outdate)
from xt_report_fieldaccess
group by fieldname
group by一般都是和聚合函数配合使用,当然,聚合函数可以不写省略.
但是group by后边的字段,一定是查询字段之中除了聚合函数之外所有的字段.
select-sql 语句中,筛选用(?)子句,分组用group by 子句,排序用order by 子句
select-sql 语句中,筛选用(?)子句,分组用group by 子句,排序用order by 子句
上述括号中筛选用什么子句?
yangshu9611年前1
LISHIHUI928 共回答了14个问题 | 采纳率85.7%
筛选用
where 子句
比如
select * from sutdent where 年龄=20
这就是根据年龄这个条件进行筛选
数据库group by语句select * from hb_student_info where card_id in(
数据库group by语句
select * from hb_student_info where card_id in(select card_id from hb_student_info group by card_id having count(card_id)>1)
我知道这句的功能是查找出card_id相同的纪录 具体是怎么实现功能的,count函数大于1是什么意思?
heroy1231年前1
bibyc 共回答了20个问题 | 采纳率85%
select card_id from hb_student_info group by card_id having count(card_id)>1
group by 是按照card_id分组,配合having做条件筛选
比如hb_student_info中数据如下:
card_id 栏位1 栏位2
001 1 2
001 2 2
001 3 4
002 4 4
003 4 4
003 2 3
通过group by 分组后
card_id
001
002
003
此时在select 中加入count(card_id) 去看 select card_id,count(card_id)from hb_student_info group by card_id
card_id count(card_id)
001 3
002 1
003 2
通过这样的数据就可以看出 只有001和003是符合条件的(即card_id有相同的记录)
in 后面的查询条件就是通过筛选分组后card_id>1的数目找出所有的card_id
GROUP BY ROLLUP (A,B,C) HAVING A IS NOT NULL AND D NOT NULL是
GROUP BY ROLLUP (A,B,C) HAVING A IS NOT NULL AND D NOT NULL是什么意思啊 哪位高手知道?
dxx11081年前1
琉璃绿 共回答了23个问题 | 采纳率91.3%
GROUP BY子句里面的ROLLUP,此选项对GROUP BY 子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行.改变列的顺序会使返回的结果的行数发生变化.也就是说ROLLUP(A,B,C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作.【另外一个GROUP BY子句的类似参数是CUBE,如果是GROUP BY CUBE(A,B,C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作.】
HAVING子句的话你可以理解为GROUP BY子句的where子句,起筛选作用的,就是先分组,然后只取A IS NOT NULL AND D NOT NULL的行.
列 'C.ShL' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中.
列 'C.ShL' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中.
select sum(B.Shu1)as He,B.KCID,C.ShL from B left join C on B.KCID=C.KCID group by B.KCID
where
(B.ShiJian between '2014-02-02' and '2014-02-14') group by B.KCID,C.ShL
送你53包烟1年前1
ernst 共回答了10个问题 | 采纳率100%
把提示的列补上group by B.KCID,C.ShL
GROUP BY 用法表:楼层 房号一楼 101一楼 102一楼 105二楼 201二楼 202二楼 205请问如何使用
GROUP BY 用法
表:
楼层 房号
一楼 101
一楼 102
一楼 105
二楼 201
二楼 202
二楼 205
请问如何使用 GROUP BY 语句得到如下结果:
楼层 房号1,房号2,房号3
一楼 101,102,105
二楼 201,202,205
注:每一个楼层不一定是3个房间
101,102,105 这个的顺序不能乱,要升序排列
墨墨桃1年前1
hiiamvv 共回答了22个问题 | 采纳率90.9%
先把最多的记录的房间取出来,再行转列
Access时,参照
http://zhidao.baidu.com/question/158219080.html
以SQL Server为例,Oracle时用静态就行了
use Tempdb
go
--> -->

if not object_id(N'Tempdb..#') is null
drop table #
Go
Create table #([楼层] nvarchar(2),[房号] int)
Insert #
select N'一楼',101 union all
select N'一楼',102 union all
select N'一楼',105 union all
select N'二楼',201 union all
select N'二楼',202 union all
select N'二楼',205
Go
DECLARE @s NVARCHAR(2000),@i NVARCHAR(2)
SET @s=''
Select TOP 1 @i=COUNT(*) from # GROUP BY 楼层 ORDER BY COUNT(*) desc
WHILE @i>0
SELECT @s=N',max(case when con='+@i+N' then [房号] end) as 房间'+@i+@s,@i=@i-1
EXEC('SELECT [楼层]'+@s+' FROM (SELECT con=(SELECT COUNT(1) FROM # WHERE 楼层=a.楼层 AND [房号]
oracle 分析函数rank()over()使用,与group by的区别
oracle 分析函数rank()over()使用,与group by的区别
最近看到oracle的分析函数rank,经常与over一起使用,但是不是很清楚与group by的区别,看起来功能很相似,rank over的使用场景和分组group by 的区别
partition
顺便帮忙分析一下下面的 mysql的sql语句
SELECT id,
score,
rank
FROM (SELECT tmp.id,
tmp.score,
@rank := @rank + 1 AS rank
FROM (SELECT id,
score
FROM a
ORDER BY score desc) tmp,
(SELECT @rank := 0) a) RESULT;
有几个不太理解的地方
@rank算是变量的申明吗?@rank := @rank + 1 @rank的初始值是从哪里来的SELECT @rank := 0,算是rank的初始值么,
spotol1年前1
杨不懂 共回答了13个问题 | 采纳率84.6%
你这里的rank 就是参数吧.
oracle里面rank over 和 group by 是完全不一样的东西.
怎么还功能相似呢.理解不能.
rank over 的用法.
group by 只是在分组的时候使用.
问个group by和count()
问个group by和count()
我有一个表T_test,有ABC三列
A B C
1 a 11
1 b 00
2 a 11
2 b 11
2 c 00
我想实现
select A,count(*) 这个组中记录数的数量,count() 这个组中C=‘11’的记录数的数量 from T_test group by A
也就是结果集这样三列:
经过分组的A的值 该组中记录数总量 改组中满足某个条件的记录数的数量
请问这个要怎么写呢?
zxbdgm0001年前1
只是流年暗度 共回答了19个问题 | 采纳率84.2%
select a,count(a) as 等于x的记录总量 ,(select count(*) from T_test) as 总体数量 from T_test where a='x' group by a
GROUP BY,WHERE,HAVING之间的区别和用法
乐2乐1年前1
强盗甲 共回答了19个问题 | 采纳率78.9%
group by 分组 having 是对分组后的结果 做条件查询
where 是查询条件完成后在分组,一个在前一个在后
有关group by报错,not a GOUP BY expression
有关group by报错,not a GOUP BY expression
这条就会报错
select acmratt.brcode,sum(acmratt.tdccramt)from acmratt group by 1
但是,改成
select acmratt.brcode,sum(acmratt.tdccramt)from acmratt group by acmratt.brcode
就可以过…… 这是为什么,记得是可以用1来指代第一列的啊
mickliu1年前1
拉丁120 共回答了17个问题 | 采纳率94.1%
用 1 是指在查询语句中 第一个列 这种用法限定在查询语句中列的概念 sum 做为聚合函数 使用在分组中计算分组后的和 是不可以使用 1 这种方式的
select 年级,count(*) from 成绩表 group by 年级 order by NO 出错了
select 年级,count(*) from 成绩表 group by 年级 order by NO 出错了
select 年级,count(*) from 成绩表 group by 年级 order by NO
如上,出现 试图执行的查询中,不包含作为合计函数的一部分的特定表达式'NO'
求教怎么修改就能达到如下效果:
输出结果按照年级分类,计算每个年级的人数,并且将结果按照NO的顺序来排列
另外,我要求输出结果中只有年级和人数,不需要把NO也显示出来
love94靓1年前1
滴水流痕 共回答了14个问题 | 采纳率92.9%
--楼主你不觉得你的需求有点矛盾吗
--按照年级汇总后 如果字段no和年级不是一一对应 怎么显示呢 除非是一一对应显示才没有问题
--而且你这个写法也是错的 order by里面的字段必须在聚合函数 或group by里面
--我下面这个写法是年级和no是一一对应的 不对应就没法写
--有什么疑问可以随时问我
select 年级,num from (
select 年级,no,count(1) num from 成绩表 group by 年级,no) a order by no
group by group的意思
huanghui341年前1
cs2324 共回答了20个问题 | 采纳率95%
group by group翻译成中文是:(分批的,分组的)的意思.
oracle 我想使用group by 汇总一下资料,同时需要让分类的大类出现一次,详细见补充.
oracle 我想使用group by 汇总一下资料,同时需要让分类的大类出现一次,详细见补充.
如 class name 我想要的是:class name
一班 小明 一班 小明
一班 小刚 小刚
二班 小李 二班 小李
二班 小五 小五
没分了,不过感谢是大把的!
吉儿最美21年前1
xinsi74 共回答了18个问题 | 采纳率88.9%
SELECT
CASE WHEN
ROW_NUMBER() OVER (PARTITION BY class ORDER BY name) = 1 THEN class
ELSE ''
END AS class,
name
FROM