【生活质量系列】评测几款用过的咖啡机

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货

最近看过此主题的会员

坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
前Google华人高管创立
面试offer一键直通
Leap.ai助你进入热门独角兽
查看: 944|回复: 10
收起左侧

求问一道SQL高频题

[复制链接] |试试Instant~
我的人缘0
xjoxjoxjo 发表于 2018-5-22 11:52:06 | 显示全部楼层 |阅读模式
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (10)
 
 
0% (0)  踩

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

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
求问利扣上一道SQL题:https://leetcode.com/problems/de ... salary/description/我写的是这样:. from: 1point3acres
SELECT D.Name AS Department, E.Name AS Employee, E.Salary
FROM Employee AS E
JOIN Department AS D
ON E.DepartmentId=D.Id
WHERE 1>. Waral 博客有更多文章,
(SELECT count(E1.Salary)
FROM Employee AS E1
WHERE E1.Salary> E.Salary
AND E.DepartmentId=E1.DepartmentId
GROUP BY E.DepartmentId);

去掉最后一排的group by才返回正确答案,否则什么也不返回。我知道还有别的优化做法,但为什么我后面加一个GROUP BY E.DepartmentId就不对了?
求大神解答一下,感谢~

上一篇:找工作迷茫求各位帮忙解惑
下一篇:fb blueprint 柜惊

本帖被以下淘专辑推荐:

  • · BA|主题: 135, 订阅: 23
我的人缘0
忽尔今夏 发表于 2018-5-24 07:05:09 | 显示全部楼层
本楼: 【顶】   100% (3)
 
 
0% (0)   【踩】
全局: 顶  100% (38)
 
 
0% (0)  踩
SELECT b.Name AS Department, a.Name AS Employee, a.Salary
FROM Employee a
JOIN Department b
ON a.DepartmentId = b.Id
WHERE (a.DepartmentId, a.Salary) in
   (SELECT DepartmentId, Max(Salary) AS Salary
    FROM Employee
    GROUP BY DepartmentId)
资历最老的留学申请文书修改服务:EssayEdge
回复

使用道具 举报

我的人缘0
belindamao 发表于 2018-5-24 06:41:44 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (2)
 
 
0% (0)  踩
我也遇到这个问题了,我用了group by为啥感觉都不对。而且用R或者python来处理数据,思维就是先group再排列比较啊。。。不懂为何不对。求大神解释
回复

使用道具 举报

我的人缘0
misslost 发表于 2018-5-25 22:50:12 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (50)
 
 
0% (0)  踩
是不是leetcode用的都是MySQL 不能用window function啊哭...... 1point 3acres 论坛

select c.Name as Department, b.Employee, b.Salary. 1point 3acres 论坛
from
(select Name as Employee, Salary, DepartmentId
from
(select *, row_number() over (partition by DepartmentId order by Salary desc) as row_num
from Employee) a .本文原创自1point3acres论坛
where row_num=1) b. 牛人云集,一亩三分地
left join Department c. more info on 1point3acres
on b.DepartmentId = c.Id
回复

使用道具 举报

我的人缘0
Feiyan 发表于 2018-5-31 13:57:43 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  83% (36)
 
 
16% (7)  踩
我不是很懂MYSQL的syntax,但我理解的是count()的group by的是来自你外层的D.Name AS Department, E.Name AS Employee, E.Salary,你再加一个GROUP BY E.DepartmentId其实多余,居然没有报语法错误,如果能多跑几个test case可能能知道为什么。因为这种写法,其实是用Employee E cartesian join Employee E1, where E1.Salary> E.Salary AND E.DepartmentId=E1.DepartmentId.   

Complexity Quiz: Test your understanding of Data Structure
来自于网课《Data Structures for Coding Interview in Python》

回复

使用道具 举报

我的人缘0
Feiyan 发表于 2018-5-31 14:00:00 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  83% (36)
 
 
16% (7)  踩
misslost 发表于 2018-5-25 22:50
是不是leetcode用的都是MySQL 不能用window function啊哭.....

select c.Name as Department, b.Employe ...

leetcode有oracle,oracle有这个window function。你写的都对,但是要用rank() 不能用 row_number(),要不然这道题就是easy了
回复

使用道具 举报

我的人缘0
emilyylau 发表于 2018-6-1 11:15:22 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (2)
 
 
0% (0)  踩
[SQL] 纯文本查看 复制代码
select Department
,   Name as Employee
,   Salary
from 
( 
SELECT a.*
,   b.Name as Department
,   rank() over (partition by b.Name order by a.Salary desc) as rankid 
FROM Employee A 
INNER JOIN Department B
ON A.DepartmentId = B.Id) x
where rankid = 1 
回复

使用道具 举报

我的人缘0
kedalg 发表于 2018-6-1 14:20:19 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (1)
 
 
0% (0)  踩
当E.Salary最大时括号里的结果集是空集而不是{0},这会导致结果集和1无法比较
回复

使用道具 举报

我的人缘0
QuantX 发表于 2018-6-14 08:42:34 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  95% (21)
 
 
4% (1)  踩
select
Department.Name as Department,. Waral 博客有更多文章,
Employee.Name as Employee,
Employee.Salary as Salary
from Employee join Department on employee.departmentid=department.id
where (employee.departmentid, employee.salary) in (select e2.departmentid, max(e2.salary) from employee e2 group by 1);
回复

使用道具 举报

我的人缘0
zhangxqs08 发表于 2018-6-24 04:38:57 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (12)
 
 
0% (0)  踩
已经有了E.DepartmentId=E1.DepartmentId就不需要group by了吧
回复

使用道具 举报

我的人缘0
sunflowerslj 发表于 2018-6-25 00:21:02 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (8)
 
 
0% (0)  踩
在Leetcode里面选Oracle,然后用以下query

SELECT d.Name AS Department, e.Name As Employee, e.Salary AS Salary
FROM. more info on 1point3acres
(SELECT DepartmentId, Name, Salary, rank() over (partition by DepartmentId order by Salary desc) as Rank
FROM Employee) e
INNER JOIN Department d
ON e.DepartmentId = d.Id
WHERE e.Rank =1
回复

使用道具 举报

游客
请先登录

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|小黑屋|一亩三分地论坛声明

GMT+8, 2018-9-25 19:22

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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