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

甘肃省住房和建设厅网站首页网站主页样式

甘肃省住房和建设厅网站首页,网站主页样式,网站技术开发设计,南充网站设计学校文章目录 问题group by到底做了什么举个例子简单来说为什么select字段#xff0c;count()不能和*共同使用总结 问题 这是一段摘抄自MySQL官网的文字。其大致意思是MySQL拓展了group by的使用#xff0c;MySQL允许选择没有出现在group by中的字段。换句话说#xff0c;标准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到底做了什么 扫描表数据: 数据库引擎从表中读取所有行。 按分组列进行排序或哈希: 数据库引擎根据 GROUP BY 子句中指定的列对行进行排序或使用哈希算法将行分到不同的分组中。不同的数据库系统可能使用不同的实现方式排序、哈希、甚至混合方法来高效地实现分组。 分配行到各个分组: 数据库将每一行放入相应的分组。所有具有相同 GROUP BY 列值的行将被分配到同一个分组。 应用聚合函数: 对每个分组应用指定的聚合函数如 COUNT, SUM, AVG, MAX, MIN 等。这些聚合函数会对每个分组中的行进行计算并返回一个聚合结果。 生成输出: 对于每个分组生成一行输出结果包含 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, ‘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 对数据进行排序或哈希[‘2023-06-01’, ‘2023-06-01’, ‘2023-06-02’, ‘2023-06-03’, ‘2023-06-03’]。 分配行到各个分组: 数据库将行分配到分组 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) 应用聚合函数: 对每个分组应用 SUM(amount)Group 1: SUM(100.00, 150.00) 250.00Group 2: SUM(200.00) 200.00Group 3: SUM(250.00, 300.00) 550.00 生成输出: 生成每个分组的输出 (‘2023-06-01’, 250.00)(‘2023-06-02’, 200.00)(‘2023-06-03’, 550.00) 简单来说 说的通俗点就是形成如下数据结构 MapColumn, 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() 函数是对**聚合后的ListRow**使用 加入我们是select *那么Row中的数据将会包含一行的所有字段此时的count应该处理的是count函数 中所指定的字段。count处理完成后将ListRow聚合成一个值那么其他的字段呢其他的字段也要聚合成一个值但没有聚合规则呀 所以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.w-s-a.com/news/505778/

相关文章:

  • 飞沐网站设计江苏建设人才网证书查询
  • 网站优化的意义怎么帮商家推广赚钱
  • 安顺公司做网站福州建设发展集团有限公司网站
  • 普陀企业网站建设做散客机票的网站如何推广
  • 河北网站建设与制作建设宁波市分行的互联网网站
  • python做网站是不是特别慢百度推广基木鱼
  • 卖网站链接东营住房和城乡建设信息网
  • 网站后台如何上传ico图标单位建设网站需要的材料
  • 如何建淘客网站郑州做网站最好的公司
  • 连锁酒店网站方案o2o网站建设方案
  • 功能型网站响应式网站原理
  • 聊城建设网站骨干校 建设网站
  • 网站建设与管理是干嘛的中国新闻社是什么单位
  • 帮别人做视频剪辑的网站传业做微采商城网站
  • 设计一个网站开发方案宣传片制作企业
  • 新网站收录多少关键词免费一键网站
  • 网页制作与网站建设 在线作业手表网站制作照片
  • 电商网站开发技术与维护重庆建筑工程交易信息网
  • 人和马做的网站线上营销推广方式
  • 青海教育厅门户网站有赞商城
  • 网站建设多语种自动翻译插件wordpress谷歌翻译插件
  • 泰安高级网站建设推广wordpress教程 好看
  • 我自己的网站怎么做关键词优化泰安网站建设dxkjw
  • 平面设计做画册用网站泰州seo平台
  • 申请一个域名后怎么做网站evernote wordpress
  • 网站左侧导航栏设计网站开发后台数据怎么来
  • 临西做网站报价网站建设需要写语句吗
  • 建设网站网站首页购物网站开发代码
  • 淘宝客怎么建立网站网站360优化
  • 安徽建海建设工程有限公司网站网站空间和域名价格