我有一张表,上面有员工名单以及他们出售的单位数量。& [3 C7 O0 M* m8 a; d
我想获得售出的前25%的平均单位和售出的下25%的平均单位。 2 W4 g O; G4 A) \$ Y( W7 f K我创建了我的数据SLQ小提琴的表示形式2 n% @ A/ t+ t9 Q4 | r6 y: F
我真的不知道该如何开始?我看到的所有示例都是针对SQL Server而非MySQL。这就是我的想法。# F; |+ M( }: q, j- N. d7 }3 B
我想要25个百分点,不能限制为25个项目。基本上它将涉及:4 H/ s* r: X8 ?& W1 S
1) #_of_employees = The number of total employees.+ M% ]5 t9 `+ i! Q) j3 \, `2 T3 R; P- ]+ z
2) #_of_employees_in_25_percentile = #_of_employees*0.25) [; ]5 q/ A- u+ s
3) Calculate the sum of the units sold by the top/bottom 25 percentile (limit #_of_employees_in_25_percentile)& S, B$ }$ l* Z/ ~) _
4) Divide the sum by #_of_employees_in_25_percentile to get the average. ; i2 @7 m& c1 F) R. I+ [如何在MySQL中有效地完成所有这些工作?& U4 S+ ^/ r$ m+ @2 J1 z- o
7 W5 k" B7 A/ v. b2 o解决方案:' H- h" Z2 W+ R8 n
# t& F6 F' G' U0 ?! R $ O* \$ V4 O, W) t" I% ?/ s! A% i, g! X
这是一个解决方案,它使用了我从这个问题中学到的一个诡计。 ; `& S/ k6 o sSELECT id, unit_sold, n * 100 / @total AS percentile( L4 m; S+ F; e+ ~) i- a% X. \0 `
FROM (' Y- ]& z, Z) Z
SELECT id, unit_sold, @total := @total + unit_sold AS n $ C8 B- c. A' W; I: C FROM mydata, (SELECT @total := 0) AS total 2 \* v( E8 c# c+ @) z: k1 _ ORDER BY unit_sold ASC c4 v! [; N7 X
) AS t . Q7 [5 v7 | A9 U# ]" Y9 ]SQL提琴。