sql - 什么时候应该为 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。
特别是关于这段代码:
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 特有的吗?有人知道吗?谢谢你。
解决方案
这是我相信的标准 SQL。为了清楚起见,“TAB”是第二个 SELECT 产生的表的别名,即括号内的那个。它可以是您选择的任何名称(例如“T1”、“Extract”或“Whatever”),不必是“TAB”。
推荐阅读
- javascript - 已解决我无法在 MongoDB 中保存 Post var,因为我的 User.findOne(email) 不起作用
- c++ - 使用 pow 评估指数时 NAN 但如果我迭代则正确答案?
- php - 我无法将 1.5MB 以上的图像上传到服务器上的目录
- java - 如何通过 Java Spring Webflux 发送多个 POST 请求
- scala - 为什么这个 flatMap 返回的是 Map 而不是列表?
- python - C51强化学习算法极慢
- python - 将 Python 字典从一个字典移动到另一个字典
- fortran - 从不同版本的 Fortran 编译
- ruby-on-rails - Rails 日志。如何在日志中隐藏来自特定控制器的所有参数?
- sql - 根据 where 语句从子查询中选择多个结果计数?