我有一张表,上面有员工名单以及他们出售的单位数量。# t. X3 C$ @: }+ b6 G1 q, P1 j
我想获得售出的前25%的平均单位和售出的下25%的平均单位。 % }; S/ X* Y1 n, Q8 N* @3 f我创建了我的数据SLQ小提琴的表示形式) a* A; X1 v; U1 Q: y/ @( m
我真的不知道该如何开始?我看到的所有示例都是针对SQL Server而非MySQL。这就是我的想法。+ q6 t" y, w6 C3 z# H% p
我想要25个百分点,不能限制为25个项目。基本上它将涉及:5 E& j+ F* l. L+ J _
1) #_of_employees = The number of total employees. . k. P x$ Y5 G" p6 N2) #_of_employees_in_25_percentile = #_of_employees*0.25, \: R2 Q- e5 ~# f" T
3) Calculate the sum of the units sold by the top/bottom 25 percentile (limit #_of_employees_in_25_percentile), n. y1 N6 Y. z+ i2 Q l0 W5 t
4) Divide the sum by #_of_employees_in_25_percentile to get the average.3 n% t, l: |- w9 q/ o" M( g
如何在MySQL中有效地完成所有这些工作? - Z# j9 h" H/ l4 M1 y : z% B+ F) a$ h0 R+ r5 m1 G X 解决方案:' }5 s$ u6 [3 U" n$ C$ x6 y
. S$ a5 H" | W" Z& t 3 |: a6 \: T. \4 V* N/ v* d0 {) M* L4 p6 k. j
这是一个解决方案,它使用了我从这个问题中学到的一个诡计。 % F; G. o) q- ~# HSELECT id, unit_sold, n * 100 / @total AS percentile 4 l+ N% w3 J8 a. m1 J! W& ]FROM (2 @5 O2 [- L; i& P s
SELECT id, unit_sold, @total := @total + unit_sold AS n ' F; e- s1 V- u& v: b FROM mydata, (SELECT @total := 0) AS total # m6 U' Y* W2 | ORDER BY unit_sold ASC 0 h( { Q1 J# K) AS t 4 i& O: z+ Z1 m1 A- F$ t; l( BSQL提琴。