数据库的group by有什么意义呢

数据库的group by有什么意义呢,第1张

数据库的group by意义是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。例如:SELECT COUNT() AS 水果种类 FROM Table GROUP BY ProductPlace

这个SQL语句就是使用了Group By + 分组字段的方式,那可以解释成“按照出产国家(ProductPlace)将数据集进行分组,然后分别按照各个组来统计各种水果的记录数量。”

扩展资料:

如果GROUP BY使用 ALL 关键字,那么查询结果将包括由 GROUP BY 子句产生的所有组,即使某些组没有符合搜索条件的行。没有 ALL 关键字,包含 GROUP BY 子句的 SELECT 语句将不显示没有符合条件的行的组。

在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行可用来表示所有值,也可以在结果中显示为 NULL。

参考资料来源:

百度百科——GROUP BY

百度百科——聚合函数

group by就是你按照某一列的进行分组,使用group by配合聚合函数使用。例如:

table1 table2

id name id2 id value

1 小小 1 1 嘿嘿

2 大大 2 1 哈哈

3 2 啦啦

4 2 给给

两个表中的id是主外键的关系,现在可以查name为小小的在table2中的的数据总数的sql

select tab1name,count(tab2value) as '数据总数' from table1 tab1

left join table2 tab2 on tab1id = tab2id

group by tab1id

其实后面还可以下having进行筛选,order by 进行排序 where条件搜索。

望采纳。

这样可以么?

说一点看法啊。

最好不要嘛所有词汇放在一张表力,这样如果客户已经过了4级,正在过六级,那么他的查询负载将增大,而且将来可能增加托福,雅思,GRE等词汇,如果都在一张表内这样的话,会造成查询资源浪费,而且每次出新词时也可能比较慢。所以建议将这些分开。四级词汇一张表,六级词汇一张表,GRE一张,还有一些。具体的字段其实也就是那些,什么id字段啊,释义字段啊,词语字段(字段属于什么词,比如名词,动词),例句字段啊,甚至包括分组字段,是否重点词汇等等,当然这个仅仅是一个开头还有好多可能的。

用户这块可分为用户表和会员表,用户表都可以选择你要的是什么词汇,比如4级词汇,比如六级词汇,这样学起来比较有针对性。而且个人觉也可以将词汇进行一些表内分组(比如水果,生活或者必考,生僻等等,具体方式好说),大家的话,他家学起来更容易。也更好找。

会员表则就可以收藏词汇了,是否记住的标记啊,什么的。不过只有这一点功能并不能吸引人,还要加一些功能,比如考试功能,重点词汇等等。

收藏词汇表管理表,根据id进行收藏,比如一个一星的用户能收藏几个,二星几个等等,这个属于指定规则的,

还有一些什么收藏汇总推荐,难词解析啊,等等。毕竟软件是要卖钱的,没有一些功能的话,谁会买?

select 名称 , 分类 ,sum( 重量) as 重量 from 表1

group by 名称 , 分类

这样就可以了。

CREATE OR REPLACE PROCEDURE PRO_NAME AS

BEGIN

INSERT INTO TEMP_NAME

SELECT AID AS ID,

ANAME AS NAME,

BPRICE AS PRICE2010,

CPRICE AS PRICE2011,

DPRICE AS PRICE2012

FROM FRUITS A, PRICE2010 B, PRICE2011 C, PRICE2012 D

WHERE AID = BID

AND AID = CID

AND AID = DID;

END;

我这里给你一个  类似的例子,   表结构也就是简单的   分类,  明细

要查询每个分类下面,   随机明细  几条的情况

你可以参考参考

测试表与测试数据。

CREATE TABLE test_order_by_rand (group_code varchar(10), name varchar(10));

INSERT INTO test_order_by_rand VALUES('水果', '苹果');

INSERT INTO test_order_by_rand VALUES('水果', '梨子');

INSERT INTO test_order_by_rand VALUES('水果', '香蕉');

INSERT INTO test_order_by_rand VALUES('水果', '桃子');

INSERT INTO test_order_by_rand VALUES('水果', '菠萝');

INSERT INTO test_order_by_rand VALUES('蔬菜', '萝卜');

INSERT INTO test_order_by_rand VALUES('蔬菜', '白菜');

INSERT INTO test_order_by_rand VALUES('蔬菜', '蘑菇');

INSERT INTO test_order_by_rand VALUES('蔬菜', '毛豆');

INSERT INTO test_order_by_rand VALUES('蔬菜', '青椒');

INSERT INTO test_order_by_rand VALUES('坚果', '核桃');

INSERT INTO test_order_by_rand VALUES('坚果', '榛子');

INSERT INTO test_order_by_rand VALUES('坚果', '杏仁');

INSERT INTO test_order_by_rand VALUES('坚果', '花生');

INSERT INTO test_order_by_rand VALUES('坚果', '开心果');

预期目标, 按照 group_code 进行分组, 每个分组内, 进行随机获取数据SELECT

  group_code,

  name

FROM

(

SELECT

  CASE 

    WHEN @cn != group_code THEN @rownum:= 1 

    ELSE @rownum:= @rownum + 1  

    END AS No,

  group_code,

  @cn := group_code AS group_code,

  name

FROM

  (SELECT @rownum:=0) r,

  (SELECT @cn:= '') p,

  (SELECT  FROM test_order_by_rand order by group_code, rand()) tmp

)  subQuery

WHERE

  No <= 3

ORDER BY

  group_code;

  

  

这里套了2层子查询, 其中的

(SELECT  FROM test_order_by_rand order by group_code, rand()) tmp  

用于实现, 针对每一个  group_code 进行分组, 下属的 name 的数据, 进行随机排序

其中的

()  subQuery

用于实现, 针对 前面的 按 group_code 分组, name 随机排序后的数据。

模拟一个  row_number() over(partition by group_code) 的处理

最后的 No <= 3 用于限制, 每一个 group_code 下面, 显示多少行

执行结果:

+------------+--------+

| group_code | name   |

+------------+--------+

| 水果       | 苹果   |

| 水果       | 香蕉   |

| 水果       | 梨子   |

| 蔬菜       | 青椒   |

| 蔬菜       | 白菜   |

| 蔬菜       | 蘑菇   |

| 坚果       | 核桃   |

| 坚果       | 花生   |

| 坚果       | 开心果 |

+------------+--------+

9 rows in set (000 sec)

以上就是关于数据库的group by有什么意义呢全部的内容,包括:数据库的group by有什么意义呢、sql 关于group by、想做一个背单词的软件,可我应该怎么设计SQL数据库呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存