我给类似下面的尝试,通过它假设一个主键在这张桌子上。如果没有主键,您将很容易更新特定的行,否则会出现很多重复项。
所以在这个例子中,我会假设表如下
someTable (
pkID (Primary Key),
position,
Average,
gpm
)
所以下面的INSERT会做我希望
INSERT INTO someTable (
pkID,
position
)
SELECT
someTable.pkID,
calcTable.position
FROM someTable
INNER JOIN (
SELECT
MIN(c.position) AS position,
c.Average,
c.gpm
FROM (
// Calculate the position for each Average/gpm combination
SELECT
@p = @p + 1 AS position,
someTable.Average,
someTable.gpm
FROM (
SELECT @p:=0
) v,someTable
ORDER BY
someTable.Average DESC,
someTable.gpmp ASC
) c
// Now regroup to get 1 position for each combination (the lowest position)
GROUP BY c.Average,c.gpm
) AS calcTable
// And then join this calculated table back onto the original
ON (calcTable.Average,calcTable.gpm) = (someTable.Average,someTable.gpm)
// And rely on the PK IDs clashing to allow update
ON DUPLICATE KEY UPDATE position = VALUES(position)
自己试过什么?如果是这样,在这里发布 – xbonez 2012-04-19 14:51:58