当前位置: 首页 > news >正文

网站放到iis如何做指向四年级的简短新闻播报

网站放到iis如何做指向,四年级的简短新闻播报,wordpress文章墙插件,怎么做网站前台文章目录 问题group by到底做了什么举个例子简单来说为什么select字段,count()不能和*共同使用总结 问题 这是一段摘抄自MySQL官网的文字。其大致意思是MySQL拓展了group by的使用,MySQL允许选择没有出现在group by中的字段。换句话说,标准SQ…

文章目录

    • 问题
    • group by到底做了什么
    • 举个例子
    • 简单来说
    • 为什么select字段,count()不能和*共同使用
    • 总结

问题

在这里插入图片描述
这是一段摘抄自MySQL官网的文字。其大致意思是MySQL拓展了group by的使用,MySQL允许选择没有出现在group by中的字段换句话说,标准SQL是不允许select column出现没在group by中出现的字段

所以在MySQL中,select * from table group by column是允许的

在这里插入图片描述

BUT

select *, count(column) from table group by column是不允许的
在这里插入图片描述

我们来简单分析一下原因

group by到底做了什么

  1. 扫描表数据:

    • 数据库引擎从表中读取所有行。
  2. 按分组列进行排序或哈希:

    • 数据库引擎根据 GROUP BY 子句中指定的列对行进行排序,或使用哈希算法将行分到不同的分组中。不同的数据库系统可能使用不同的实现方式(排序、哈希、甚至混合方法)来高效地实现分组。
  3. 分配行到各个分组:

    • 数据库将每一行放入相应的分组。所有具有相同 GROUP BY 列值的行将被分配到同一个分组。
  4. 应用聚合函数:

    • 对每个分组应用指定的聚合函数(如 COUNT, SUM, AVG, MAX, MIN 等)。这些聚合函数会对每个分组中的行进行计算,并返回一个聚合结果。
  5. 生成输出:

    • 对于每个分组,生成一行输出结果,包含 GROUP BY 列以及聚合函数的计算结果。

举个例子

假设我们有一个简单的表 Sales:

CREATE TABLE Sales (sale_id INT,sale_date DATE,amount DECIMAL(10, 2)
);
INSERT INTO Sales (sale_id, sale_date, amount) VALUES
(1, '2023-06-01', 100.00),
(2, '2023-06-01', 150.00),
(3, '2023-06-02', 200.00),
(4, '2023-06-03', 250.00),
(5, '2023-06-03', 300.00);

我们要按 sale_date 分组,并计算每个日期的总销售额:

SELECT sale_date, SUM(amount) AS total_sales
FROM Sales
GROUP BY sale_date;

执行步骤:

  1. 扫描表数据:

    • 数据库读取所有行:(1, ‘2023-06-01’, 100.00), (2, ‘2023-06-01’, 150.00), (3, ‘2023-06-02’, 200.00), (4, ‘2023-06-03’, 250.00), (5, ‘2023-06-03’, 300.00)。
  2. 按分组列进行排序或哈希:

    • 数据库根据 sale_date 对数据进行排序或哈希:[‘2023-06-01’, ‘2023-06-01’, ‘2023-06-02’, ‘2023-06-03’, ‘2023-06-03’]。
  3. 分配行到各个分组:

    • 数据库将行分配到分组:
      • Group 1 (‘2023-06-01’): (1, ‘2023-06-01’, 100.00), (2, ‘2023-06-01’, 150.00)
      • Group 2 (‘2023-06-02’): (3, ‘2023-06-02’, 200.00)
      • Group 3 (‘2023-06-03’): (4, ‘2023-06-03’, 250.00), (5, ‘2023-06-03’, 300.00)
  4. 应用聚合函数:

    • 对每个分组应用 SUM(amount):
    • Group 1: SUM(100.00, 150.00) = 250.00
    • Group 2: SUM(200.00) = 200.00
    • Group 3: SUM(250.00, 300.00) = 550.00
  5. 生成输出:

    • 生成每个分组的输出:
      • (‘2023-06-01’, 250.00)
      • (‘2023-06-02’, 200.00)
      • (‘2023-06-03’, 550.00)

简单来说

说的通俗点就是形成如下数据结构
Map<Column, List> groupBy

  • k1 -> [row1, row2, row3]
  • k2 -> [row4, row5, row6]

然后迭代groupBy,对每个List做聚合处理

ans = []
for key, values in groupBy:ans.append(key, 聚合函数(values))

为什么select字段,count()不能和*共同使用

通过上述分析不难发现,count() 函数是对**聚合后的List<Row>**使用

加入我们是select *,那么Row中的数据将会包含一行的所有字段,此时的count应该处理的是count函数 中所指定的字段。count处理完成后,将List<Row>聚合成一个值,那么其他的字段呢?其他的字段也要聚合成一个值,但没有聚合规则呀

所以,count()和*理论上不能同时出现在select字段中。因为count只聚合函数指定的字段,而select *则表示数据行出现所有字段。
其中 一个字段制定了聚合规则,从List聚合为value,那其他字段可不知道怎么聚合,处理后依然是List,因此出现了数据维度的差异,所以理论上count()和*不能同时出现

BUT,我们看看这段SQL
在这里插入图片描述
依然是能够跑通的,但这是为什么呢?

其实原因很简单。虽然其他字段不知道聚合规则,但要从List聚合为value,随便选一条数据不久完事了。我们从上图可知,对于非聚合字段,MySQL选择了组间第一行数据作为输出

总结

理论上,group by [col1, col2…]只能和select [col1, col2…]配合,也就是如果存在group by,那么select的字段必须出现在group by中

但是MySQL做出了拓展,允许非聚合字段和聚合字段同时出现

并且允许select *, count(col1) from table group by col1这种形式的SQL出现

http://www.zhongyajixie.com/news/17740.html

相关文章:

  • 伪静态网站入侵我是seo关键词
  • 新建网站seo优化怎么做网络营销具有什么特点
  • 怎么加入平台卖货兰州seo优化入门
  • 做网站的不给源文件怎么在百度上发布信息广告
  • 国外设计素材网站免费网站域名费一年多少钱
  • 企业培训体系搭建seo快速优化
  • 通用企业手机网站模板账号seo是什么
  • 个人 可以备案做分类信息网站吗站长工具seo综合查询工具
  • 哈尔滨网站建设市场分析网络营销的策略包括
  • 电商网站项目经验介绍ppt模板手机百度搜索
  • 番禺网站建设报价开发网站需要多少钱
  • 中小企业还需要网站吗信息流优化师培训机构
  • 经典重庆网站重庆电子商务seo
  • 茶山做网站网站优化技巧
  • 网站建设技术哪些方面优化培训方式
  • 网站建设计划书公司的网站
  • 衡水网站制作与推广seo文章代写一篇多少钱
  • 做影视网站如何加速东莞全网营销推广
  • 怎样做类似淘宝网的网站整站排名服务
  • 江苏国龙翔建设网站需要优化的网站有哪些
  • 百川互联aso优化贴吧
  • 学校网站开发程序百度首页排名优化平台
  • 装修队伍做网站百度seo排名技术必不可少
  • 查询网站是否备案seo关键词优化费用
  • 站长平台如何推广自己的网站网站一年了百度不收录
  • 合肥做网站cnfg自己怎么创建网站
  • 大连做网站billionseo亚洲长尾关键词挖掘
  • 网站建设昆明网络公司宁波正规优化seo价格
  • 绵阳建设工程信息网站汕头网站建设方案维护
  • 重庆网站制作技术广告联盟官网入口