返回顶部
首页 > 资讯 > 数据库 >5个编写SQL查询时常出现的错误分别是什么
  • 363
分享到

5个编写SQL查询时常出现的错误分别是什么

2024-04-02 19:04:59 363人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关5个编写sql查询时常出现的错误分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。SQL被广泛应用于数据分析和数据提取。易

这篇文章将为大家详细讲解有关5个编写sql查询时常出现的错误分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

SQL被广泛应用于数据分析和数据提取。易上手,受到业内人士的一致好评

尽管刚开始编写SQL相当容易,但是出错率也是相当的高。

下面是小芯整理的,在编写SQL查询代码时大家经常犯的5个错误。

示例很短,可能看起来很简单。但是,在处理更大的查询时,这些错误可就不会一目了然了。其中一些示例是特定于AWS  Redshift的,而另一些则会出现在其他SQL数据库(Postgres、Mysql等)。这些示例应该在本地数据库上运行,或者可以使用SQLFiddle在线运行。

示例SQL查询可下载。

设定

创建两个临时表,其中有几个条目有助于处理示例。

Sales表

该表包含带有时间戳、产品、价格等的销售条目。请注意,key列是唯一的,其他列中的值可以重复(例如ts列)。

DROP TABLE IF EXISTSsales;  CREATE TEMPORARY TABLE sales  (  key varchar(6),  ts timestamp,  product integer,  completed boolean,  price float  );INSERT INTO sales  VALUES ('sale_1', '2019-11-08 00:00', 0, TRUE, 1.1),  ('sale_2', '2019-11-08 01:00', 0, FALSE,1.2),  ('sale_3', '2019-11-08 01:00', 0, TRUE,1.3),  ('sale_4', '2019-11-08 01:00', 1, FALSE,1.4),  ('sale_5', '2019-11-08 02:00', 1, TRUE,1.5),  ('sale_6', '2019-11-08 02:00', 1, TRUE,1.5);SELECT * FROM sales;
5个编写SQL查询时常出现的错误分别是什么

Hourly delay表

该表包含某一天每小时的延迟时间。请注意,ts列在下表中是唯一的。

DROP TABLE IF EXISTShourly_delay;  CREATE TEMPORARY TABLE hourly_delay  (  ts timestamp,  delay float  );  INSERT INTO hourly_delay  VALUES ('2019-11-08 00:00', 80.1),  ('2019-11-08 01:00', 100.2),  ('2019-11-08 02:00', 70.3);SELECT* FROM hourly_delay;
5个编写SQL查询时常出现的错误分别是什么

1.按相同时间戳排序

检索每种产品最近一次的售价:

SELECT price  FROM (SELECT price, row_number() OVER (PARTITioN BYproduct ORDER BY ts DESC) AS ix FROM sales) ASq1  WHERE ix = 1;
5个编写SQL查询时常出现的错误分别是什么

以上查询的问题是多个销售具有相同的时间戳。此查询在相同数据上的连续运行可能得出不同的结果。下图可见,产品0在2019-11-11-08  01:00有两次销售,价格分别为1.2和1.3。

5个编写SQL查询时常出现的错误分别是什么

用下一个错误修复这个查询:)

2. 根据条件计算平均值

计算完成销售的产品的平均价格。值是(1.1 + 1.3 + 1.5 + 1.5)/ 4,即1.35。

SELECT avg(price)  FROM (SELECT CASE WHEN completed = TRUETHEN price else 0 END AS price FROM sales) ASq1;

当运行查询时,值为0.9。为什么?因为发生了这一计算:(1.1+0+1.3+0+1.5+1.5)/6是0.9。查询中的错误是,将0设置为不应包含的项。应使用NULL而不是0。

SELECT avg(price)  FROM (SELECT CASE WHEN completed = TRUETHEN price else NULL END AS price FROMsales) AS q1;

当前,输出和预计一样是1.35。

3.计算整数列的平均值

计算含有整数的product列的平均值。

SELECT avg(product)  FROM sales;

Product列中有3个0和3个1,预估平均值为0.5。大多数数据库(例如最新版本的Postgres)将返回0.5,但是Redshift将返回0,因为它不会自动将product列强制转换为float。因此需要将其强制转换为float类型:

SELECT avg(product::FLOAT)  FROM sales;

4. 内连接

假设要对每天的所有销售延迟进行汇总,并计算每天的平均销售价格。

SELECT t2.ts::DATE, sum(t2.delay),avg(t1.price)  FROM hourly_delay AS t2  INNER JOIN sales ASt1 ON t1.ts = t2.ts  GROUP BY t2.ts::DATE;
5个编写SQL查询时常出现的错误分别是什么

结果是错误的!以上查询将hourly_delay表中的delay列乘以倍数,如下图所示。这是因为按时间戳连接,该时间戳在hourly_delay表中是唯一的,但在sales表中会重复。

5个编写SQL查询时常出现的错误分别是什么

为了修复这个问题,要在一个单独的子查询中为每个表计算统计信息,然后连接汇总。这使得时间戳在两个表中都是唯一的。

SELECT t1.ts, daily_delay, avg_price  FROM (SELECT t2.ts::DATE, sum(t2.delay) ASdaily_delay FROM hourly_delay AS t2 GROUP BYt2.ts::DATE) AS t2  INNER JOIN (SELECTts::DATE AS ts, avg(price) AS avg_price FROM sales GROUPBY ts::DATE) AS t1 ON t1.ts = t2.ts;
5个编写SQL查询时常出现的错误分别是什么

5.将列添加到ORDER BY

对上述错误的补救是显而易见的。将key列添加到ORDER BY,这样一来,查询结果就可以在相同数据上重复出现——快速修复。

SELECT price  FROM (SELECT price, row_number() OVER (PARTITION BYproduct ORDER BY ts, key DESC) AS ix FROMsales) AS q1  WHERE ix = 1;
5个编写SQL查询时常出现的错误分别是什么

为什么查询结果不同于上一次运行?在进行“快速修复”时,key列被放在了ORDER  BY中的错误位置。它应该在DESC语句之后,而不是之前。查询现在将返回第一笔销售,而不是最后一笔销售。再进行一次修正。

SELECT product, price  FROM (SELECT product, price, row_number() OVER (PARTITION BYproduct ORDER BY ts DESC, key) AS ix FROMsales) AS q1  WHERE ix = 1;
5个编写SQL查询时常出现的错误分别是什么

本次修复使结果可重复。

关于5个编写SQL查询时常出现的错误分别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: 5个编写SQL查询时常出现的错误分别是什么

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

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

猜你喜欢
  • 5个编写SQL查询时常出现的错误分别是什么
    这篇文章将为大家详细讲解有关5个编写SQL查询时常出现的错误分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。SQL被广泛应用于数据分析和数据提取。易...
    99+
    2024-04-02
  • 写Python时的5个坏习惯分别是什么
    写Python时的5个坏习惯分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。注意:示例代码在 Python 3.6 环境下编写1 用列表作函数的默认参数...
    99+
    2023-06-17
  • Java开发者编写SQL语句时常见错误分别有哪些
    今天就跟大家聊聊有关Java开发者编写SQL语句时常见错误分别有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java开发者对于面向对象编程思维...
    99+
    2024-04-02
  • 学习用Python编程时要避免的3个错误分别是什么
    这篇文章将为大家详细讲解有关学习用Python编程时要避免的3个错误分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。这些错误会造成很麻烦的问题,需要数小时才能解决。当你做错事时,承认...
    99+
    2023-06-17
  • Elasticsearch常见的5个错误及解决策略是什么
    这期内容当中小编将会给大家带来有关Elasticsearch常见的5个错误及解决策略是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、采用动态Mapping如果不定义Mapping,Elastics...
    99+
    2023-06-04
  • Python程序员最常犯的十个错误分别是什么
    本篇文章给大家分享的是有关Python程序员最常犯的十个错误分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。常见错误1:错误地将表达式作为函数的默认参数在Python中...
    99+
    2023-06-17
  • web前端小白经常出现的四个错误是什么
    这篇文章主要讲解了“web前端小白经常出现的四个错误是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端小白经常出现的四个错误是什么”吧!错误一转...
    99+
    2024-04-02
  • SQL实现分页查询的方法是什么
    SQL实现分页查询的方法主要有两种:1. 使用LIMIT和OFFSET关键字:```sqlSELECT * FROM tab...
    99+
    2023-08-15
    SQL
  • SQL怎么查询每个分组都出现的字段值
    今天给大家介绍一下SQL怎么查询每个分组都出现的字段值。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。数据分组以后,要找出在每个分组中都出现的某个字段值。用SQ...
    99+
    2023-06-03
  • 不容错过的5个微型Linux发行版分别是什么
    小编给大家分享一下不容错过的5个微型Linux发行版分别是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Tiny CoreTiny Core LinuxTiny Core Linux 小得近乎不可思议:终端版本只有 1...
    99+
    2023-06-16
  • 不知道为什么在尝试使用 f 字符串运行 SQL UPDATE 查询时出现语法错误
    问题内容 我正在尝试运行基本的 sql 查询来更新名为 bartonhill 的数据库中 schoolnum 的值,使用 f 字符串将值放入 import sqlite3 name =...
    99+
    2024-02-10
  • 查看Linux系统架构类型的5条常用命令分别是什么
    今天就跟大家聊聊有关查看Linux系统架构类型的5条常用命令分别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。无论你使用的是桌面版或是只装了文本界面的 Linux 环境我们都需...
    99+
    2023-06-28
  • 从SQL到NoSQL7种比较查询语言的指标分别是什么
    从SQL到NoSQL7种比较查询语言的指标分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我们将研究七个比较SQL和N...
    99+
    2024-04-02
  • CSS中容易犯的10个错误提示分别是什么
    这篇文章将为大家详细讲解有关CSS中容易犯的10个错误提示分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。即使是CSS高手,也难免在书写CSS代码的...
    99+
    2024-04-02
  • 出现MySQL server has gone away这个错误的原因是什么
    本篇内容主要讲解“出现MySQL server has gone away这个错误的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“出现MySQL se...
    99+
    2024-04-02
  •  Java SE面向对象编程的3个常用接口分别是什么
    这篇文章主要为大家分析了 Java SE面向对象编程的3个常用接口分别是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“ J...
    99+
    2023-06-26
  • 网站开发中外链数量暴增之后出现异常的三个解决办法分别是什么
    今天就跟大家聊聊有关网站开发中外链数量暴增之后出现异常的三个解决办法分别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  不少网站的外链都出现暴增的现象,而外链暴增后的网站有不...
    99+
    2023-06-10
  • 断言:模拟:我不知道要返回什么,因为方法调用是意外的 在 Go 中编写单元测试时出错
    php小编小新在这篇文章中将为您介绍在Go语言中编写单元测试时出现的一种常见错误,即断言错误。当我们在编写单元测试时,有时会遇到无法确定返回值的情况,这会导致意外的方法调用错误。在本文...
    99+
    2024-02-10
    go语言
  • SQLServer 错误 17884 在最后 %d 秒内,没有一个工作线程拾取了分配给节点 %d 上的进程的新查询。 查询被阻塞或长时间运行可能导致出现此情况,并且可能会延长客户端响应时间。 请使用
    详细信息 Attribute 值 产品名称 SQL Server 事件 ID 17884 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 SRV_SCHEDULER_DEADLOCK 消...
    99+
    2023-11-05
    线程 进程 工作
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作