赞
踩
sql架构
- Create table If Not Exists Employee (Id int, Company varchar(255), Salary int)
- Truncate table Employee
- insert into Employee (Id, Company, Salary) values ('1', 'A', '2341')
- insert into Employee (Id, Company, Salary) values ('2', 'A', '341')
- insert into Employee (Id, Company, Salary) values ('3', 'A', '15')
- insert into Employee (Id, Company, Salary) values ('4', 'A', '15314')
- insert into Employee (Id, Company, Salary) values ('5', 'A', '451')
- insert into Employee (Id, Company, Salary) values ('6', 'A', '513')
- insert into Employee (Id, Company, Salary) values ('7', 'B', '15')
- insert into Employee (Id, Company, Salary) values ('8', 'B', '13')
- insert into Employee (Id, Company, Salary) values ('9', 'B', '1154')
- insert into Employee (Id, Company, Salary) values ('10', 'B', '1345')
- insert into Employee (Id, Company, Salary) values ('11', 'B', '1221')
- insert into Employee (Id, Company, Salary) values ('12', 'B', '234')
- insert into Employee (Id, Company, Salary) values ('13', 'C', '2345')
- insert into Employee (Id, Company, Salary) values ('14', 'C', '2645')
- insert into Employee (Id, Company, Salary) values ('15', 'C', '2645')
- insert into Employee (Id, Company, Salary) values ('16', 'C', '2652')
- insert into Employee (Id, Company, Salary) values ('17', 'C', '65')

- SELECT
- Employee.Id, Employee.Company, Employee.Salary
- FROM
- Employee,
- Employee alias
- WHERE
- Employee.Company = alias.Company
- GROUP BY Employee.Company , Employee.Salary
- HAVING SUM(CASE
- WHEN Employee.Salary = alias.Salary THEN 1
- ELSE 0
- END) >= ABS(SUM(SIGN(Employee.Salary - alias.Salary)))
- ORDER BY Employee.Id
- ;
- SELECT
- Id, Company, Salary
- FROM
- (SELECT
- e.Id,
- e.Salary,
- e.Company,
- IF(@prev = e.Company, @Rank:=@Rank + 1, @Rank:=1) AS rank,
- @prev:=e.Company
- FROM
- Employee e, (SELECT @Rank:=0, @prev:=0) AS temp
- ORDER BY e.Company , e.Salary , e.Id) Ranking
- INNER JOIN
- (SELECT
- COUNT(*) AS totalcount, Company AS name
- FROM
- Employee e2
- GROUP BY e2.Company) companycount ON companycount.name = Ranking.Company
- WHERE
- Rank = FLOOR((totalcount + 1) / 2)
- OR Rank = FLOOR((totalcount + 2) / 2)
- ;

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。