【问题标题】:How this query can be answered ? Select SUM(1) FROM table如何回答这个问题?从表中选择 SUM(1)
【发布时间】:2022-01-29 02:53:10
【问题描述】:

select * from "Test"."EMP"

id
1
2
3
4
5
Select SUM(1) FROM "Test"."EMP";
Select SUM(2) FROM "Test"."EMP";
Select SUM(3) FROM "Test"."EMP";

为什么这些查询的输出是?

5
10
15

并且 我不明白他们为什么写这样的表名“Test”。“EMP”

【问题讨论】:

  • 您只是添加数字 1、2 和 3,而不是表中的 ID。第一个查询计算为 1 x 5 = 5。第二个查询计算为 2 x 5 = 10。第三个查询为 3 x 5 = 15。

标签: mysql sql database mysql-workbench sql-query-store


【解决方案1】:

您的表有 5 条记录。语句 select 1 from test.emp 返回 5 条记录,所有 5 条记录的值为 1。

id
1
1
1
1
1

这是因为 db 引擎只是为每个现有记录返回 1,而不读取单元格的内容。 select <any static value> from test.emp 也是如此

2 和 3 也是如此

id
2
2
2
2
2

因此有 5 条记录与静态值一起返回,这些值的总和将是 select 语句中传递的 static number 和表中的 total records 中的 product

附加事实:总是建议执行count(1) 而不是count(*),因为它消耗的资源更少,因此服务器上的负载也更少

【讨论】:

    【解决方案2】:

    我认为它不是带有双引号的 "Test"."EMP"。它可能是带有反引号的`Test`.`EMP`。定义意味着它的database_name.table_name。这是从database_name 获得正确table_name 的推荐格式;在这种情况下,您专门制定了从`Test`.`EMP` 查询的语法。阅读有关identifier qualifiers 的更多信息。

    对于SUM(x)x 会根据表中存在的行重复。所以 5 行上的SUM(1)1+1+1+1+1,5 行上的SUM(2)2+2+2+2+2,依此类推。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2020-04-17
      • 2012-06-13
      • 2019-05-18
      相关资源
      最近更新 更多