【发布时间】:2018-07-31 18:48:09
【问题描述】:
我的数据如下所示:
id name score
--------------------
a apple 0.2
a apple 0.7
a apple 1.1
a banana 1.2
b cherry 0.8
b lemon 0.9
c mango 2.4
c raspberry 1.9
d strawberry 0.7
d lemon 1.1
对于每个id,我想选择得分最高的行,但只有id和name:
id name
----------
a banana
b lemon
c mango
d lemon
以下查询使用 sqlite 完成这项工作。 (在this answer中有解释,为什么这个查询在大多数DBMS中实际上是无效的):
SELECT id, name from (SELECT id, name, max(score) from data group by id);
问题是:没有子查询这可能吗?
注意:我目前正在使用 sqlite,但我正在寻找一个便携式解决方案。如果只有供应商特定的解决方案,这也是一个有效的答案。 This question 类似,但不讨论子查询的必要性。
【问题讨论】:
-
我相信在sqlite中没有子查询是不可能的。
-
不过,postgresql 有一个解决方案,使用
DISTINCT ON:stackoverflow.com/questions/3800551/… -
取决于您使用的 dbms。
-
一个 id 的两个不同水果的最高分相同的预期结果是什么?
-
问题中的示例查询本质上只是一个
SELECT DISTINCT id, name FROM data为什么需要子查询呢?或者,如果您对组中最大值的名称感兴趣,则该查询不可靠,您得到实际值只是一个幸运的巧合。
标签: sql group-by aggregate-functions greatest-n-per-group