資料庫查詢------每日一題與解答----- 每個公司的工資的中位數
阿新 • • 發佈:2021-07-16
最近關注了一個公眾號,該公眾號主要圍繞著資料庫為技術主線展開,裡面有每日一題
- T0716 表包含所有員工,其中有三列:員工 Id,公司名和薪水。
ID | Company | Salary |
---|---|---|
1 | A | 8341 |
2 | A | 9410 |
3 | A | 10050 |
4 | A | 15314 |
5 | A | 8451 |
6 | A | 9513 |
7 | B | 10005 |
8 | B | 13000 |
9 | B | 11540 |
10 | B | 10345 |
11 | B | 12210 |
12 | B | 9234 |
13 | C | 12000 |
14 | C | 8900 |
15 | C | 9000 |
16 | C | 10100 |
17 | C | 8000 |
- 現在 的需求是求每個公司的工資的中位數
需求結果如下:
ID | Company | Salary |
---|---|---|
6 | A | 9513 |
2 | A | 9410 |
9 | B | 11540 |
10 | B | 10345 |
15 | C | 9000 |
程式碼實現:
CREATE TABLE T0716 ( ID INT, Company VARCHAR(10), Salary INT ); INSERT INTO T0716 VALUES (1,'A',8341), (2,'A',9410), (3,'A',10050), (4,'A',15314), (5,'A',8451), (6,'A',9513), (7,'B',10005), (8,'B',13000), (9,'B',11540), (10,'B',10345), (11,'B',12210), (12,'B',9234), (13,'C',12000), (14,'C',8900), (15,'C',9000), (16,'C',10100), (17,'C',8000)
查詢語句如下:
- 建立臨時表
- 根據中位數的條件判斷篩選出合適的記錄
WITH temp AS (
SELECT a.*,ROW_NUMBER() over (PARTITION BY company ORDER BY Salary DESC) paiming,count(1) over (PARTITION BY company) num FROM t0716 a)
SELECT a.ID,a.Company,a.Salary FROM temp a WHERE paiming=round(num/2,0) OR (paiming=round(num/2)+1 AND num % 2=0)