0

假设有一个表人(ID,.....,n_success,n_fails)

喜欢

 ID  n_success   n_fails

 a1      10         20
 a2      15         10
 a3      10         1

我想进行一个查询,该查询将返回具有最大 n_success/(n_success+n_fails) 的人的 ID。

在这种情况下,我想得到的输出是:

  a3   0.9090909091

我试过了:

  select ID,(N_succes/(n_success + n_fails)) 'rate' from person

通过这个查询,我有每个 ID 的相对成功率

  select ID,MAX(N_succes/(n_success + n_fails)) 'rate' from person

使用此查询只有 1 行正确率但 ID 不正确

我能怎么做?

4

4 回答 4

1

这取决于您的 SQL 方言,但在 T-SQL 中它将是:

SELECT TOP 1 p.ID, p.n_success / (p.n_success + p.n_fails) AS Rate
FROM persona p
ORDER BY p.n_success / (p.n_success + p.n_fails) DESC

您可以根据需要对其他方言进行更改(LIMIT 1例如,用于 MySql 和 SQLite)。

于 2013-05-26T22:00:20.650 回答
1

微软 SQL

SELECT TOP 1 ID, (`n_success` / (`n_success` + `n_fails`)) AS 'Rate' FROM persona
ORDER BY (n_success / (n_success + n_fails)) DESC

MySQL

SELECT `ID`, (`n_success` / (`n_success` + `n_fails`)) AS 'Rate' FROM `persona`
ORDER BY (`n_success` / (`n_success` + `n_fails`)) DESC
LIMIT 1
于 2013-05-26T21:59:56.543 回答
1

已经有很多答案了。在SQL Fiddle上检查工作代码以及上次编辑所需的输出。

SELECT `ID`, `n_success` 'rate'
  FROM `persona`
 ORDER BY (`n_success` / (`n_success` + `n_fails`)) DESC
 LIMIT 1
于 2013-05-26T22:04:05.687 回答
1
select id, (n_success/(n_success + n_fails)) as rate from person
where (n_success/(n_success + n_fails)) = 
    (select max(n_success/(n_success + n_fails)) from person)
于 2013-05-26T22:28:48.733 回答