首页 > 解决方案 > 什么时候应该为 SQL 中的子查询添加 TAB?

问题描述

我正在 SQLZOO 中练习 SQL,但无法理解问题 #5 的解决方案:https ://sqlzoo.net/wiki/Window_functions

我从另一个用户@crowtherl 那里复制了表格和问题的描述

此问题使用表格“ge”,其中包括 2015 年和 2017 年英国的大选结果。“ge”包括字段 yr、firstName、lastName、constituency、party 和 votes。问题 #5 要求学习者展示 2017 年赢得每个爱丁堡选区的政党。之前,教程指出爱丁堡选区的编号为 S14000021 到 S14000026。

解决方案:SQLZOO 的“窗口函数”教程中的问题 #5

特别是关于这段代码:

  select  constituency,party from 
(
SELECT constituency,party, votes , 
rank() OVER (PARTITION BY constituency order by votes desc) rn
  FROM ge
 WHERE constituency BETWEEN 'S14000021' AND 'S14000026'
   AND yr  = 2017
ORDER BY constituency,votes DESC
) TAB WHERE rn =1

如果我在外部查询中运行上面没有“TAB”的查询,我会得到:“错误:每个派生表都必须有自己的别名。”

在四处搜索后,我找不到一个很好的答案来解释为什么我需要添加“TAB”。这是 MariaDB 特有的吗?有人知道吗?谢谢你。

标签: sqlmariadbmariasql

解决方案


这是我相信的标准 SQL。为了清楚起见,“TAB”是第二个 SELECT 产生的表的别名,即括号内的那个。它可以是您选择的任何名称(例如“T1”、“Extract”或“Whatever”),不必是“TAB”。


推荐阅读