数据库查询后怎么分组 请详细讲解下group by

数据库查询后怎么分组 请详细讲解下group by,第1张

group

by

通常的用法是分组计数和求和

group

by

dept_id

就是以

dept_id

来分组,你的记录集里只有

3

个不同的

dept_id

所以结果是

3

条记录。

select

,

COUNT()

AS

"nCount"

from

emp

group

by

dept_id

结果那

nCount

就是对应每个

dept_id

的记录数计数

select

,

SUM(salary)

AS

"nTotal"

from

emp

group

by

dept_id

结果那

nTotal

就是对应每个

dept_id

salary

合计

数据库在磁盘上的基本组织形式是文件。

数据库分组架构是每个数据库都以文件的形式存放在磁盘上,即对应于一个物理文件。不同的数据库,与物理文件对应的方式也不一样。

对于dBASE,FoxPro和Paradox格式的数据库来说,一个数据表就是一个单独的数据库文件,而对于MicrosoftAccess、Btrieve格式的数据库来说,一个数据库文件可以含有多个数据表。

Oracle按不同时间分组统计的sql

如下表table1:

日期(exportDate)

数量(amount)

--------------

-----------

14-2月

-08

20

10-3月

-08

2

14-4月

-08

6

14-6月

-08

75

24-10月-09

23

14-11月-09

45

04-8月

-10

5

04-9月

-10

44

04-10月-10

88

注意:为了显示更直观,如下查询已皆按相应分组排序

1按年份分组

select

to_char(exportDate,'yyyy'),sum(amount)

from

table1

group

by

to_char(exportDate,'yyyy');

年份

数量

-----------------------------

2009

68

2010

137

2008

103

2按月份分组

select

to_char(exportDate,'yyyy-mm'),sum(amount)

from

table1

group

by

to_char(exportDate,'yyyy-mm')

order

by

to_char(exportDate,'yyyy-mm');

月份

数量

-----------------------------

2008-02

20

2008-03

2

2008-04

6

2008-06

75

2009-10

23

2009-11

45

2010-08

5

2010-09

44

2010-10

88

3按季度分组

select

to_char(exportDate,'yyyy-Q'),sum(amount)

from

table1

group

by

to_char(exportDate,'yyyy-Q')

order

by

to_char(exportDate,'yyyy-Q');

季度

数量

------------------------------

2008-1

22

2008-2

81

2009-4

68

2010-3

49

2010-4

88

4按周分组

select

to_char(exportDate,'yyyy-IW'),sum(amount)

from

table1

group

by

to_char(exportDate,'yyyy-IW')

order

by

to_char(exportDate,'yyyy-IW');

数量

------------------------------

2008-07

20

2008-11

2

2008-16

6

2008-24

75

2009-43

23

2009-46

45

2010-31

5

2010-35

44

2010-40

88

PS:Oracle按时间段分组统计

想要按时间段分组查询,首先要了解level,connect

by,oracle时间的加减

关于level这里不多说,我只写出一个查询语句:

----level

是一个伪例

select

level

from

dual

connect

by

level

<=10

---结果:

1

2

3

4

5

6

7

8

9

10

oracle时间的加减看看试一下以下sql语句就会知道:

select

sysdate

-1

from

dual

----结果减一天,也就24小时

select

sysdate-(1/2)

from

dual

-----结果减去半天,也就12小时

select

sysdate-(1/24)

from

dual

-----结果减去1

小时

select

sysdate-((1/24)/12)

from

dual

----结果减去5分钟

select

sydate-(level-1)

from

dual

connect

by

level<=10

---结果是10间隔1天的时间

下面是本次例子:

select

dt,

count(satisfy_degree)

as

num

from

T_DEMO

i

,

(select

sysdate

-

(level-1)

2

dt

from

dual

connect

by

level

<=

10)

d

where

isatisfy_degree='satisfy_1'

and

iinsert_time<dt

and

iinsert_time>

ddt-2

group

by

ddt

例子中的sysdate

-

(level-1)

2得到的是一个间隔是2天的时间

group

by

ddt

也就是两天的时间间隔分组查询

自己实现例子:

create

table

A_HY_LOCATE1

(

MOBILE_NO

VARCHAR2(32),

LOCATE_TYPE

NUMBER(4),

AREA_NO

VARCHAR2(32),

CREATED_TIME

DATE,

AREA_NAME

VARCHAR2(512),

);

select

(sysdate-13)-(level-1)/4

from

dual

connect

by

level<=34

--从第一条时间记录开始(sysdate-13)为表中的最早的日期,“34”出现的分组数(一天按每六个小时分组

就应该为4)

一下是按照每6个小时分组

select

mobile_no,area_name,max(created_time

),dt,

count()

as

num

from

a_hy_locate1

i

,

(select

(sysdate-13)-(level-1)/4

dt

from

dual

connect

by

level

<=

34)

d

where

ilocate_type

=

1

and

icreated_time<dt

and

icreated_time>

ddt-1/4

group

by

mobile_no,area_name,ddt

另外一个方法:

--按六小时分组

select

trunc(to_number(to_char(created_time,

'hh24'))

/

6),count()

from

t_test

where

created_time

>

trunc(sysdate

-

40)

group

by

trunc(to_number(to_char(created_time,

'hh24'))

/

6)

--按12小时分组

select

trunc(to_number(to_char(created_time,

'hh24'))

/

6),count()

from

t_test

where

created_time

>

trunc(sysdate

-

40)

group

by

trunc(to_number(to_char(created_time,

'hh24'))

/

6)

排序采用ORDER BY语句:ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录行排序。如果希望按照降序对记录进行排序,可以使用 DESC关键字。

SQL有两种使用方式:

一是联机交互使用,这种方式下的SQL实际上是作为自含型语言使用的。

另一种方式是嵌入到某种高级程序设计语言(如C语言等)中去使用。前一种方式适合于非计算机专业人员使用,后一种方式适合于专业计算机人员使用。尽管使用方式不向,但所用语言的语法结构基本上是一致的。

扩展资料:

以同一种语法结构提供两种使用方式:

SQL既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接输入SQL命令对数据库进行 *** 作。作为嵌入式语言,SQL语句能够嵌入到高级语言(如C、 C#、JAVA)程序中,供程序员设计程序时使用。

而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的 *** 作方式,为用户提供了极大的灵活性与方便性。

参考资料来源:百度百科-结构化查询语言

以上就是关于数据库查询后怎么分组 请详细讲解下group by全部的内容,包括:数据库查询后怎么分组 请详细讲解下group by、数据库在磁盘上的基本组织形式是、Oracle数据库按时间进行分组统计数据的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10196289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存