查看: 1654| 回复: 8
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] 小白最近学sql有个题没看懂求助

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
瑟瑟发抖 如果发错版了望告知~ 先谢谢了

write a query to view flights by origin, flight id, and sequence number. Alias the sequence number column as flight_sequence_number. assuming flight_id increments with each additional flight。

SELECT origin, id,
    (SELECT COUNT(*)
FROM flights as f
WHERE f.id < flights.id
AND f.origin=flights.origin) + 1
AS flight_sequence_number
FROM flights;


还是不是很明白为什么要两个相同的column进行比较?还是说系统一开始就会排序 自动找出最小的id 然后进行对比?



上一篇:面试常见9大排序算法整理(英文)
下一篇:什么level的公司会考leetcode 315/327/493 这种难度的题?
全局:
你是说<比较那个么?可能是为了找到所有的组合然后杜绝重复?
回复

使用道具 举报

🔗
 楼主| jonnsyuuri 2019-6-29 05:11:36 来自APP | 只看该作者
全局:
jasonhh 发表于 2019/06/29 05:07:46
你是说<比较那个么?可能是为了找到所有的组合然后杜绝重复?

dei 我就是说那个比较的 我不是很懂的是 他们俩一开始不是内容一样的吗😂?
回复

使用道具 举报

🔗
jasonhh 2019-6-29 05:53:31 | 只看该作者
全局:
jonnsyuuri 发表于 2019-6-29 05:11
dei 我就是说那个比较的 我不是很懂的是 他们俩一开始不是内容一样的吗😂?

哦 没看到还有+1. 那这就是相当于一个递增的序列,每多一个起点一样的就+1
回复

使用道具 举报

🔗
magicsets 2019-6-29 10:48:33 | 只看该作者
全局:
因为对于那个子查询来说 f1 和 flights 代表两个不同的table instance,只是外面的instance没有进行重命名

换句话说,楼主给的query实际上与下面稍微清晰一点的写法等价:
  1. SELECT origin, id,
  2.        ( SELECT COUNT(*)
  3.          FROM flights AS F1
  4.          WHERE F1.id < F2.id AND F1.origin = F2.origin
  5.        ) + 1 AS flight_sequence_number
  6. FROM flights AS F2;
复制代码

回复

使用道具 举报

🔗
tinaeva 2019-6-30 11:09:27 | 只看该作者
全局:
就是说在一样的origin下,比当前id小的有几个,加一表示当前id的排位,如果没有比当前id小的,那当前就是1。
这种写法相当于自己和自己inner join,condition on origin only,然后count 右边table的id小于左边table的id来获得当前id在当前origin下的排名。
感觉其实用个window function就可以了,因为本人不是sql专家,只搞过一点点大数据上的sql,望纠正。
回复

使用道具 举报

🔗
 楼主| jonnsyuuri 2019-6-30 22:47:53 来自APP | 只看该作者
全局:
tinaeva 发表于 2019/06/30 11:09:27
就是说在一样的origin下,比当前id小的有几个,加一表示当前id的排位,如果没有比当前id小的,那当前就是1。
这种写法相当于自己和自己inner join,condition on origi...

谢谢妹子~
回复

使用道具 举报

全局:
In reality 真有人这么写么。。反正我平常宁愿多写几句写明白 也不会这么求简便然后confuse自己和别人
回复

使用道具 举报

🔗
ZT98211 2019-7-7 00:06:37 | 只看该作者
全局:
LS正解。我们在实际的coding中很少这样写。而且LS提到的window function是专门解决这类问题。对于LZ的提问,可以用(不太清楚这个具体的场景和数据表的结构)大致如下 Row_number() Over(Partition by Origin order by ID XX), XX可以改成具体的window function默认到current row根据具体的需求。而且ROW_number也可以换成其他rank function(各自有些微区别。)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表