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

求问一道SQL高频题

全局:

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

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

x
求问利扣上一道SQL题:https://leetcode.com/problems/de ... salary/description/我写的是这样:
SELECT D.Name AS Department, E.Name AS Employee, E.Salary. 1point3acres
FROM Employee AS E. 1point 3acres
JOIN Department AS D
ON E.DepartmentId=D.Id. Waral dи,
WHERE 1>
(SELECT count(E1.Salary).1point3acres
FROM Employee AS E1
WHERE E1.Salary> E.Salary
AND E.DepartmentId=E1.DepartmentId
GROUP BY E.DepartmentId);.
. Χ
去掉最后一排的group by才返回正确答案,否则什么也不返回。我知道还有别的优化做法,但为什么我后面加一个GROUP BY E.DepartmentId就不对了?. check 1point3acres for more.
求大神解答一下,感谢~

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

本帖被以下淘专辑推荐:

  • · BA|主题: 155, 订阅: 68
全局:
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)
回复

使用道具 举报

🔗
belindamao 2018-5-24 06:41:44 | 只看该作者
全局:
我也遇到这个问题了,我用了group by为啥感觉都不对。而且用R或者python来处理数据,思维就是先group再排列比较啊。。。不懂为何不对。求大神解释
回复

使用道具 举报

🔗
misslost 2018-5-25 22:50:12 | 只看该作者
全局:
是不是leetcode用的都是MySQL 不能用window function啊哭.....

select c.Name as Department, b.Employee, b.Salary
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
where row_num=1) b
left join Department c.--
on b.DepartmentId = c.Id
回复

使用道具 举报

🔗
Feiyan 2018-5-31 13:57:43 | 只看该作者
全局:
我不是很懂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.   
回复

使用道具 举报

🔗
Feiyan 2018-5-31 14:00:00 | 只看该作者
全局:
misslost 发表于 2018-5-25 22:50
是不是leetcode用的都是MySQL 不能用window function啊哭...... 1point 3 acres

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

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

使用道具 举报

🔗
wallie 2018-6-1 11:15:22 | 只看该作者
全局:

  1. select Department-baidu 1point3acres
  2. ,   Name as Employee
  3. ,   Salary
  4. from .google  и
  5. (
  6. SELECT a.*
  7. ,   b.Name as Department
  8. ,   rank() over (partition by b.Name order by a.Salary desc) as rankid
  9. FROM Employee A . Waral dи,
  10. INNER JOIN Department B
  11. ON A.DepartmentId = B.Id) x
  12. where rankid = 1
复制代码
回复

使用道具 举报

🔗
kedalg 2018-6-1 14:20:19 | 只看该作者
全局:
当E.Salary最大时括号里的结果集是空集而不是{0},这会导致结果集和1无法比较
回复

使用道具 举报

🔗
QuantX 2018-6-14 08:42:34 | 只看该作者
全局:
select
Department.Name as Department,
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);
回复

使用道具 举报

🔗
skyup 2018-6-24 04:38:57 | 只看该作者
全局:
已经有了E.DepartmentId=E1.DepartmentId就不需要group by了吧
回复

使用道具 举报

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

本版积分规则

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