sql 语句中的 foxpro 是否可以根据条件最大分数和不同名称的 id 填充 winners_name 列

Is it possible for foxpro in sql statement to fill the winners_name column base on condition maximum score and id with different names

sql 语句中的 foxpro 是否可以根据条件最大分数和不同名称的 ID 添加和填充 winners_name 列。

我创建了一个 sql 语句,但 foxpro 不支持它,是否有其他替代方法而不是使用循环(我喜欢 sql 语句以获得更快的结果,即使在 50k行线)

SELECT * , ;
(SELECT TOP 1 doc_name FROM Table1 as b1 WHERE ALLTRIM(b1.id) = a.id ORDER BY b1.score DESC, b1.id) as WINNERS_NAME ;
FROM Table1 as a

我只有 1 个 table,列为 [ name, id, score ]

一个样本 table 会像这样

NAME   | ID   | SCORE |
BEN    | 101  | 5     |
KEN    | 101  | 2     |
ZEN    | 101  | 3     |
JEN    | 103  | 4     |
REN    | 103  | 3     |
LEN    | 102  | 5     |
PEN    | 102  | 4     |
ZEN    | 102  | 3     |  

结果是这样的(winners_name是ID上的标签)

NAME   | ID   | SCORE | WINNERS_NAME
BEN    | 101  | 5     | BEN
KEN    | 101  | 2     | BEN
ZEN    | 101  | 3     | BEN
JEN    | 103  | 4     | PEN
REN    | 103  | 3     | PEN
LEN    | 102  | 5     | LEN
PEN    | 103  | 5     | PEN
ZEN    | 102  | 3     | LEN

试试这个方法:

SELECT
    a.NAME,
    a.ID,
    a.SCORE,
    b.WINNERS_NAME
FROM Table1 a
INNER JOIN
(
    SELECT t1.ID, t1.NAME AS WINNERS_NAME
    FROM
    (
        SELECT ID, SCORE, MIN(NAME) AS NAME
        FROM Table1
        GROUP BY ID, SCORE
    ) t1
    INNER JOIN
    (
        SELECT ID, MAX(SCORE) AS MAX_SCORE
        FROM Table1
        GROUP BY ID
    ) t2
        ON t1.ID = t2.ID AND
           t1.SCORE = t2.MAX_SCORE 
) b
    ON a.ID = b.ID
ORDER BY
    a.ID;

按照下面的 link 在 MySQL 中进行演示 运行(尽管语法在 FoxPro 上仍然有效):

Demo