Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql语句中的foxpro是否可以根据条件最大分数和id用不同的名称填充winners_name列_Sql_Visual Foxpro - Fatal编程技术网

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

sql语句中的foxpro是否可以根据条件最大分数和id用不同的名称填充winners_name列,sql,visual-foxpro,Sql,Visual Foxpro,sql语句中的foxpro是否可以根据条件最大分数和id添加并填充一个winners_name列,并使用不同的名称 我已经创建了一个sql语句,但foxpro不支持它,除了使用循环,还有其他替代方法吗(我喜欢sql语句,即使在50k行中也能获得更快的结果) 我只有一个表,有列[名称、id、分数] 示例表如下所示 NAME | ID | SCORE | BEN | 101 | 5 | KEN | 101 | 2 | ZEN | 101 | 3

sql语句中的foxpro是否可以根据条件最大分数和id添加并填充一个winners_name列,并使用不同的名称

我已经创建了一个sql语句,但foxpro不支持它,除了使用循环,还有其他替代方法吗(我喜欢sql语句,即使在50k行中也能获得更快的结果)

我只有一个表,有列[名称、id、分数]

示例表如下所示

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\u name是ID上的标记)

尝试以下方法:

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;
请按照下面的链接查看MySQL中运行的演示(尽管该语法在FoxPro上仍然有效):


ID
列对应的是什么,以及指定获胜者姓名背后的逻辑是什么?更可能是一个设备ID,这些名称是有分数的玩家。我想按设备id输入获奖者的姓名。错误:子查询返回了多条记录。设备id中可能有一个玩家的分数相同。@然后您需要决定报告两个或更多并列的姓名中的哪一个。我给了你另一个选项,可以任意报告按字母顺序排列最少的名称。谢谢你,你的查询比我创建的查询运行44000行要快得多
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;