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