题目难度
困难
正确答案
SELECT E1.Id,E1.Company,E1.Salary
FROM Employee E1
LEFT JOIN Employee E2
ON E1.Company=E2.Company
GROUP BY E1.Company,E1.Salary
HAVING SUM(
CASE
WHEN E1.Salary = E2.Salary THEN 1 ELSE 0
END ) # 我出现的次数
>= ABS(SUM(SIGN(E1.Salary-E2.Salary))) #比我大的数字与比我小的数字个数之差
ORDER BY E1.Id;
中位数:
在奇数的数列中
- 如果我是中位数,
- 如果我只出现1次,比我大的数字个数与比我小的数字个数之间相差0,
- 如果我出现n次,比我大的数字个数与比我小的数字个数之间相差n-1;
- 如果我不是中位数
- 如果我只出现1次,比我大的数字个数与比我小的数字个数之间相差至少2,
- 如果我出现n次,比我大的数字个数与比我小的数字个数之间相差至少n+1;
在偶数数列中
- 如果我是中位数,
- 如果我只出现1次,比我大的数字个数与比我小的数字个数之间相差1,
- 如果我出现n次,比我大的数字个数与比我小的数字个数之间相差相差n;
- 如果我不是中位数,
- 如果我只出现1次,比我大的数字个数与比我小的数字个数之间相差至少3,
- 如果我出现n次,比我大的数字个数与比我小的数字个数之间相差至少n+2;
综上: 无论是奇数还是偶数数列,都要统计两个指标:
- 我出现了几次
- 比我大的数字与比我小的数字个数之差
- 什么情况下是中位数?
我出现的次数 >= 比我大的数字与比我小的数字个数之差
函数
- ABS 绝对值
- SIGN 大于0的数返回1,小于0的数返回-1,0返回0