数据库的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数据库呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)