对于另一行的每个不同值,如何从 table 中获取具有最大值(所有相等行)的行?

How can I get rows from a table with the max value (all equal rows) for each different value of another row?

在我正在开发的 Android 应用程序中,我需要根据 2 行(因此成对)获取有关 table 的信息,但无法真正找到实现它的方法.我怎么能用 SQL 实现呢?

/!\ 以下是一个简化的示例,因为实际情况会更令人困惑而不是帮助。 /!\

例如,如果我有这个 table:

我怎样才能得到这个结果(每个类别的最佳分数行):

我以前是这样做的:

SELECT name, category, MAX(score)
FROM SCORE_TABLE
GROUP BY category

但我会得到这个:

当我检查答案时,我看到了使用子查询的解决方案,如下所示:

SELECT *
FROM SCORE_TABLE
WHERE score == (
    SELECT MAX(score)
    FROM SCORE_TABLE
)

但这只适用于一个类别,所以我想也许我可以使用带有所有 category-max_score 对的 table 的一些变体,像这样:
MAX_SCORE_TABLE:

但我真的不知道怎么做,所以如果你有任何想法,我希望得到一些帮助^^

我相信你需要的是NTILE(num)函数。它根据分区将您的数据分成桶。您在每个类别中排名前 2 的数据将在每个类别中排名第 1。

SELECT name, category, score, NTILE(2) OVER (
        PARTITION BY category
        ORDER BY score DESC
    ) scoreplacement
FROM SCORE_TABLE
where NTILE(2) OVER (
        PARTITION BY category
        ORDER BY score DESC
    ) = 1
GROUP BY category

我还没有通过创建 table 来尝试过,但这应该会有所帮助。由于 Fromselect 之前计算,我们不能引用别名列名。

我认为这应该可行,但请检查更大的数据集:

SELECT name,
       category,
       score
FROM score_table AS tab1
RIGHT JOIN
  (SELECT category AS cat,
          MAX(score) AS max
   FROM score_table
   GROUP BY cat) AS tab2 
ON tab1.score = max AND category = cat;