当前位置: 首页 > 面试题库 >

SQL-在分组依据中使用别名

贡和裕
2023-03-14
问题内容

只是对SQL语法感到好奇。所以如果我有

SELECT 
 itemName as ItemName,
 substring(itemName, 1,1) as FirstLetter,
 Count(itemName)
FROM table1
GROUP BY itemName, FirstLetter

这将是不正确的,因为

GROUP BY itemName, FirstLetter

真的应该是

GROUP BY itemName, substring(itemName, 1,1)

但是为什么我们不能仅仅为了方便而使用前者呢?


问题答案:

就像按以下顺序执行查询一样实现SQL:

  1. FROM子句
  2. WHERE子句
  3. GROUP BY子句
  4. HAVING子句
  5. SELECT子句
  6. ORDER BY子句

对于大多数关系数据库系统,此顺序说明了哪些名称(列或别名)有效,因为它们必须在上一步中引入。

因此,在Oracle和SQL Server中,不能在SELECT子句中定义的GROUP BY子句中使用术语,因为GROUP
BY是在SELECT子句之前执行的。

但是也有例外:MySQL和Postgres似乎还具有其他一些聪明之处。



 类似资料:
  • 问题内容: 我有一张标签表,想从列表中获得计数最高的标签。 样本数据如下所示 使用 让我得到正在寻找的完美数据。但是,我想对它进行组织,以使最高的标签数排在首位,并限制它仅向我发送前20个左右。 我试过了 而且我不断收到“组功能的无效使用-ErrNr 1111” 我究竟做错了什么? 我正在使用MySQL 4.1.25-Debian 问题答案: 在所有版本的MySQL中,只需在SELECT列表中为聚

  • 问题内容: 我有两个表(1&2)应该合并到第三(3)个表中。 表1:F_Number,A_Number, A_Weight 表2:A_Number,A_Country表3:F_Number,A_Country,A_Weight 第三表应按F_Number分组,求和A_Weight,其中A_Country具有相同的值。到目前为止,表的联接工作正常: 结果是一个像这样的表: F_Number; 一个国

  • 问题内容: 我在为MySQL编写SQL查询时遇到一些问题。我有一个具有以下结构的表: 我想创建一个查询,该查询从表中提取以下信息: 查询结果应如下所示: 当然,每个唯一的“ id”具有更多行。 我已经尝试过一些查询,例如 这将返回正确的结果,但是我必须使用“ pass”的其他可能值(最多7个)来扩展它 我尝试在AVG中使用嵌套的SELECT,但这没有用,因为我没有弄清楚如何正确地将其限制为当前的’

  • 问题内容: 我的数据库具有以下设置 我想像这样输出它们: 我按组使用它们,但效果很好,但是我想遍历每个组并显示该组的内容。我该怎么做? 问题答案: 我建议只使用一个简单的查询来获取所有行,并按类别ID进行排序。仅当类别的值与上一行不同时才输出类别。

  • 问题内容: 我的mysql数据库中有一个表,该表有两列:组和子组。见下文。 我正在尝试获取每个唯一的夫妇组/子组的记录数。 这是我期望的: 阅读一些帖子后,我尝试使用count()的group by尝试了几个sql查询,但是我无法获得预期的结果。我怎样才能解决这个问题? 问题答案: 我认为您正在寻找:

  • 问题内容: 我有两张桌子。表A列出了员工姓名。表B是一个复杂的表,其中包含有关员工打来的电话的信息。 我的目标是制作一个包含“名称”和“ callCount”列的表。我的目标是“左加入”和“分组依据”,但是我一直想念没有打过电话的员工。我怎样才能只保留名称并在其中放置零? 也许我很亲密,有人可以指出我的错字吗?在此先感谢您的帮助,以下是SQL: 问题答案: 这是一个JOIN而非NULL问题:您的过