sql中group by,having语句在select前执行,那么为什么能用select中的别名

首页 / 常见问题 / 低代码开发 / sql中group by,having语句在select前执行,那么为什么能用select中的别名
作者:低代码工具 发布时间:05-15 09:44 浏览量:7373
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

SQL语句的语法顺序:ROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY。此一般不能在having condition中使用select list中的alias。但是mysql对此作了扩展。在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默认不开启。在5.7.5或之后的版本默认开启。

一、sql中group by,having语句为什么能用select中的别名

SQL语句的语法顺序:

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY

因此一般不能在having condition中使用select list中的alias。

但是mysql对此作了扩展。在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默认不开启。在5.7.5或之后的版本默认开启。

如果ONLY_FULL_GROUP_BY sql mode不开启,那么mysql对标准SQL的扩展可以生效:

  1. 允许在select list、having condition和order by list中使用没有出现在group by list中的字段。此时mysql会随机选择没有出现在group by list中的字段的值。效果和使用ANY_VALUE()是相同的。
  2. 允许在having condition中使用select list中的alias

— 1 以具体案例来介绍SQL的执行顺序(SQL Server)。

/*

要求:统计员工表里2014年1月1号及之后入职的员工所在国家、所属年份、人数,

过滤条件:以上信息里每个过国家和年份至少要对应有两条记录

排序:排序时按照国家和年份降序排列。

*/

SELECT country, YEAR(hiredate) AS yearhired, COUNT(*) AS numemployees

FROM HR.Employees

WHERE hiredate >= ‘20140101’

GROUP BY country, YEAR(hiredate)

HAVING COUNT(*) > 1

ORDER BY country, yearhired DESC;

— 2 执行顺序

    1 FROM

    2 WHERE

    3 GROUP BY

    4 HAVING

    5 SELECT

    6 ORDER BY

— 3 错误写法汇总(在了解了SQL的执行顺序后,不难发现如下的写法是错误的)

— 3.1 WHERE后用SELECT后的字段别名。

SELECT country, YEAR(hiredate) AS yearhired

FROM HR.Employees

WHERE yearhired >= 2014;

–3.2  SELECT 后一字段用前面字段的别名。

SELECT empid, country, YEAR(hiredate) AS yearhired, yearhired – 1 AS prevyear

FROM HR.Employees;

–3.3 GROUP BY用SELECT里的别名

SELECT country, YEAR(hiredate) AS yearhired, COUNT(*) AS numemployees

FROM HR.Employees

WHERE hiredate >= ‘20140101’

GROUP BY country, yearhired

HAVING COUNT(*) > 1

ORDER BY country, yearhired DESC;

/* 错误信息

Msg 207, Level 16, State 1, Line 4

Invalid column name ‘yearhired’.

*/

— 4 特别的:Mysql SQL执行顺序和标准SQL有差异,如下SQL能正常执行。

SELECT deptno dpt,COUNT(empno) cnt

FROM emp

WHERE deptno IN(10,20)

GROUP BY dpt

HAVING cnt > 1

延伸阅读:

二、Django 是什么

Django 是一个高级的 Python 网络框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django 负责处理网站开发中麻烦的部分,因此你可以专注于编写应用程序,而无需重新开发。 它是免费和开源的,有活跃繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。

Django 可以使你的应用具有以下优点:

完备性

Django 遵循“功能完备”的理念,提供开发人员可能想要“开箱即用”的几乎所有功能。因为你需要的一切都是一个”产品“的一部分,它们都可以无缝结合在一起,遵循一致性设计原则,并且具有广泛和最新的文档。

通用性

Django 可以(并已经)用于构建几乎任何类型的网站—从内容管理系统和维基,到社交网络和新闻网站。它可以与任何客户端框架一起工作,并且可以提供几乎任何格式(包括 HTML,Rss 源,JSON,XML 等)的内容。你正在阅读的网站就是基于 Django。

在内部,尽管它为几乎所有可能需要的功能(例如几个流行的数据库,模版引擎等)提供了选择,但是如果需要,它也可以扩展到使用其他组件。

安全性

Django 帮助开发人员通过提供一个被设计为“做正确的事情”来自动保护网站的框架来避免许多常见的安全错误。例如,Django 提供了一种安全的方式来管理用户账户和密码,避免了常见的错误,比如将 session 放在 cookie 中这种易受攻击的做法(取而代之的是 cookies 只包含一个密钥,实际数据存储在数据库中)或直接存储密码而不是密码哈希。

密码哈希是通过密码散列函数发送密码而创建的固定长度值。Django 能通过运行哈希函数来检查输入的密码 – 就是 – 将输出的哈希值与存储的哈希值进行比较是否正确。然而由于功能的“单向”性质,即时存储的哈希值受到威胁,攻击者也难以解决原始密码。(但其实有彩虹表 – 译者观点)

默认情况下,Django 可以防范许多漏洞,包括 SQL 注入,跨站点脚本,跨站点请求伪造和点击劫持。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

很纠结,低代码平台还要不要继续研发?感觉这个行业很卷啊
07-11 17:22
盘点国内超好用的低代码平台:10款可视化工具深度评测(上)
07-10 17:55
低代码行业大事件:从崛起到未来的全方位解读
07-10 09:23
低代码究竟是啥?带你全面了解低代码的奥秘
07-10 09:23
低代码生成微信小程序:真能开启便捷开发之旅吗?
07-10 09:23
低代码生成excel:高效办公新选择,提升企业数据处理能力
07-10 09:23
低代码的切入点究竟包括哪些方面?全面解析来了!
07-10 09:23
《低代码程序员未来发展:是机遇还是挑战?》
07-10 09:23
低代码的承诺有多现实?深度解析与实战经验分享
07-10 09:23

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科发路8号金融基地1栋5F5
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
137-1379-6908
申请预约演示
立即与行业专家交流