iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >还在手动编写GROUP BY子句?SQL Prompt可以自
  • 903
分享到

还在手动编写GROUP BY子句?SQL Prompt可以自

2024-04-02 19:04:59 903人浏览 薄情痞子
摘要

sql Prompt是一款实用的SQL语法提示工具。SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读——当开发者不大熟悉脚本时尤其有

sql Prompt是一款实用的SQL语法提示工具。SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读——当开发者不大熟悉脚本时尤其有用。SQL Prompt安装即可使用,能大幅提高编码效率。

编写GROUP BY子句对于SQL程序员来说,是一种非常常见但又单调乏味的活动。本文描述SQL Prompt将为您填充它,查询返回所有非聚合列。

“你见过这个用非聚合列自动填充GROUP BY的新功能吗?”我的同事在安装了一个新版本的SSMS不久后大声说道。我没有,但我很好奇。在我的职业生涯中,我写过成千上万的汇总查询,所以这听起来好像可以节省我一些时间。

我在SSMS中搜索了我用于测试SQL Server新版本的虚拟机,但是没有找到。事实证明,我的测试虚拟机没有安装SQL Prompt,毕竟这不是新的SSMS功能,而是那些“隐藏的”SQL Prompt增强的功能之一。

手动填写GROUP BY

假设我需要在WideWorldImporters数据库上写一个查询,以获得已订购的项目总和,按邮政编码以及客户帐户开立的年份分组。

按照典型的方式,我首先填写表格及其连接条件。我输入“or”来查找与订单相关的表格,甚至不必知道它们存在于Sales模式中。

还在手动编写GROUP BY子句?SQL Prompt可以自

我扩展SELECT列表,最初只返回我需要使用的基本行。我应用我首选的提示格式样式,查询看起来像这样:

SELECT Customers.DeliveryPostalCode AS PostalCode, 
         YEAR(Customers.AccountOpenedDate) AS AccountOpenYear, 
         OrderLines.Quantity
  FROM   Sales.OrderLines
         JOIN Sales.Orders
             ON Orders.OrderID = OrderLines.OrderID
         JOIN Sales.Customers
             ON Customers.CustomerID = Orders.CustomerID;

查询返回几十万行,其中一小部分样本如下所示:

PostalCode AccountOpenYear Quantity
  ---------- --------------- -----------
  90398      2013            7
  90005      2013            7
  90313      2013            7
  90434      2013            7

我想查看总订单数量,按客户交货邮政编码和客户开立帐户的年份,因此最终SELECT清单如下所示:

SELECT Customers.DeliveryPostalCode AS PostalCode,
         YEAR(Customers.AccountOpenedDate) AS AccountOpenYear,
         SUM(OrderLines.Quantity) AS TotalOrderQuantity

这只是一个GROUP BY子句,通常,我只是复制并粘贴SELECT子句中的非聚合列,并用GROUP BY替换SELECT:

GROUP BY Customers.DeliveryPostalCode AS PostalCode,
         YEAR(Customers.AccountOpenedDate) AS AccountOpenYear

最后,我只是删掉别名来给出这样的最终查询:

SELECT Customers.DeliveryPostalCode AS PostalCode, 
         YEAR(Customers.AccountOpenedDate) AS AccountOpenYear, 
         OrderLines.Quantity
  FROM   Sales.OrderLines
         JOIN Sales.Orders
             ON Orders.OrderID = OrderLines.OrderID
         JOIN Sales.Customers
             ON Customers.CustomerID = Orders.CustomerID
  GROUP BY Customers.DeliveryPostalCode,
         YEAR(Customers.AccountOpenedDate;

总而言之,这是一个繁琐的过程。

使用SQL提示符自动填充GROUP BY

与SQL语句的所有子句一样,SQL Prompt帮助填写GROUP BY;我以前没注意过!只需在键入GROUP BY的子句后按空格键,如图所示。

还在手动编写GROUP BY子句?SQL Prompt可以自

选择所有非聚合列,它将使用以下列表达式填充GROUP BY子句:

GROUP BY YEAR(Customers.AccountOpenedDate),
           Customers.DeliveryPostalCode;

或者,如上图所示,您可以单独选择非聚合列。如果要添加其他分组,例如按客户打开帐户的月份,只需添加MONTH(Customers.AccountOpenedDate) AS AccountOpenMonth到SELECT子句,删除现有GROUP BY子句,然后自动重新填充列表达式。该GROUP BY子句现在看起来像这样:

GROUP BY YEAR(Customers.AccountOpenedDate),
           MONTH(Customers.AccountOpenedDate),
           Customers.DeliveryPostalCode;

在某些情况下,您的SELECT子句中的值可能在聚合函数中,但不需要在GROUP BY子句中。例如,假设我们更改SELECT查询以包含两个新列,在以下代码中以粗体文本突出显示。一个是文字值,另一个是对现有列中的列进行计算GROUP BY:

SELECT Customers.DeliveryPostalCode AS PostalCode, 
         YEAR(Customers.AccountOpenedDate) AS AccountOpenYear, 
         MONTH(Customers.AccountOpenedDate) AS AccountOpenMonth,
         <strong>1 AS Value,</strong>
         <strong>YEAR(Customers.AccountOpenedDate) - 1 AS PreviousAccountOpenYear,</strong>
         SUM(OrderLines.Quantity) AS TotalOrderQuantity 
  FROM   Sales.OrderLines
         JOIN Sales.Orders
             ON Orders.OrderID = OrderLines.OrderID
         JOIN Sales.Customers
             ON Customers.CustomerID = Orders.CustomerID
  GROUP BY YEAR(Customers.AccountOpenedDate),
           MONTH(Customers.AccountOpenedDate),
           Customers.DeliveryPostalCode;

此查询将按原样执行,因为我们不需要在文字上进行分组,也不需要对仅使用GROUP BY中已有的列或表达式的表达式进行分组。

但是,如果我们删除现有GROUP BY子句,并让SQL Prompt自动填充它,那么它看起来会略有不同:

GROUP BY YEAR(Customers.AccountOpenedDate),
           MONTH(Customers.AccountOpenedDate),
  <strong>         YEAR(Customers.AccountOpenedDate) - 1,</strong>
           Customers.DeliveryPostalCode

这是一种罕见的情况,几乎肯定不会对查询的执行造成任何影响,但要注意这一点。

这是我们完成的查询,但如果您想订购输出,请尝试输入ORDER BY,看看会出现什么!

结论

一旦安装了SQL Prompt,您就会立即意识到它是如何增强SSMS的本机智能感知功能的,但这可能使您无法看到隐藏在工具各个部分中的许多其他功能。通常情况下,我只是偶然发现它们,或者是同事提醒我的时候。这只是我发现自己一旦意识到它的存在就经常使用的一个功能的另一个精华!

编写GROUP BY对于SQL程序员来说,是一种非常常见但又乏味的活动。我总是说,用软件取代那个乏味的东西。


您可能感兴趣的文档:

--结束END--

本文标题: 还在手动编写GROUP BY子句?SQL Prompt可以自

本文链接: https://www.lsjlt.com/news/39712.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql如何写循环语句
    sql 中没有传统的循环语句,但可使用递归 cte 模拟循环:创建递归 cte,包含"iteration"列来跟踪循环次数。递归查询更新"iteration"列并满足循环条件。使用 se...
    99+
    2024-06-06
  • sql如何过滤重复
    sql 中过滤重复记录的方法包括:使用 distinct 关键字去除重复值。使用 group by 子句分组结果并返回每组的第一行。使用 count() 函数查找出现多次的值并进一步过滤...
    99+
    2024-06-06
  • sql中如何实现列转行
    sql中实现列转行的操作有两种方式:使用 union 操作符通过垂直合并查询结果实现列转行。使用 pivot 函数将列数据转换为行数据,其中 pivot 函数的语法为:pivo...
    99+
    2024-06-06
    聚合函数
  • sql函数如何向上取整
    sql 中 ceiling() 函数向上取整,将数值舍入到最近的整数,语法为 ceiling(numeric_expression)。示例:向上取整 2.5 为 3,-10.2 为 -1...
    99+
    2024-06-06
  • sql如何查询字段重复数据
    可以使用 sql 的 group by 和 count() 函数、distinct 和 count() 函数或窗口函数 row_number() 来查询重复字段数据。 SQL 查询重复...
    99+
    2024-06-06
  • sql如何创建视图
    视图是 sql 中的虚拟表,从基础表中派生数据。创建视图的步骤包括:使用 create view 语句指定视图名称和从基础表中选择的列。可选地指定基础表之间的连接和应用过滤器。视图简化了...
    99+
    2024-06-06
    敏感数据
  • sql如何计算百分比
    有三种主要方法可以利用 sql 计算百分比:直接计算、使用窗口函数以及使用 case 表达式。直接计算通过将分子除以分母并乘以 100 获得百分比;窗口函数允许根据组按分母值计算百分比;...
    99+
    2024-06-06
  • 如何用sql将时间戳转换日期格式
    要将 sql 中的时间戳转换成日期格式,可以使用 to_char() 函数:to_char(timestamp_column, 'yyyy-mm-dd') 将时间戳转...
    99+
    2024-06-06
  • sql如何在表中增加一列
    如何在 sql 表中增加一列?使用 alter table 语句,指定表名、列名和数据类型;可选设置 not null 约束和默认值;运行 alter table 语句将新列添加到表中。...
    99+
    2024-06-06
  • sql如何断开数据库的使用
    可以使用 sql 语句断开数据库连接,包括:1. close 语句:立即关闭指定连接;2. disconnect 语句:关闭连接并释放资源;3. end transaction 语句:提...
    99+
    2024-06-06
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作