对于每一行,计算具有较高值的​​行的比例

时间:2016-09-15 15:47:41

标签: mysql sql

有一张表A。它有两列seller_idcnt

+-----------+------+
| seller_id |  cnt |
+-----------+------+
|        55 |    7 |
|       243 |    7 |
|       456 |    9 |
|       522 |   23 |
+-----------+------+

对于每个seller_idcnt,我需要使用cnt>来计算行的比例。当前cnt

目前我这样做:

SELECT
    A.*,
    1-(SELECT COUNT(*) FROM A WHERE cnt >= A.cnt )/(SELECT COUNT(*) FROM A )  
FROM 
    A

但执行需要很长时间。

如何重写以更有效地执行?

更新 做一些有点帮助。但还是不够好。它仍然是N ^ 2次操作。

SELECT COUNT(*) FROM A into @count;

SELECT
    A.*,
    1-(SELECT COUNT(*) FROM A WHERE cnt >= A.cnt )/@count  
FROM 
    A

0 个答案:

没有答案