当顺序很重要时查询成功尝试的分组

Query for grouping of successful attempts when order matters

比方说,我有一个 db table Jumper 用于跟踪跳高运动员。它包含三个感兴趣的列:attempt_id、运动员和结果(一个布尔值,表示跳投者是否越过了栏杆)。

我想编写一个查询来比较所有运动员在不同尝试中的表现,产生一个 table,其中包含以下信息:尝试次数、清除尝试次数、总尝试次数。换句话说,运动员在 x 次尝试中通过横杆的机会是多少。

编写此查询的最佳方式是什么?这比一开始看起来要棘手,因为您需要确定每个运动员的尝试次数才能计算出最终总数。

我更喜欢用 Django ORM 编写答案,但 SQL 也将被接受。

编辑:明确地说,我需要将其按尝试分组,而不是按运动员分组。所以这将是所有运动员的总 x 尝试。

您可以使用 SQL:

来解决
SELECT t.attempt_id,
       SUM(CASE t.result WHEN TRUE THEN 1 ELSE 0 END) AS cleared,
       COUNT(*) AS total
  FROM Jumper t
 GROUP BY t.attempt_id

编辑: 如果 attempt_id 只是一个序列,并且您想用它来计算每个跳线的尝试次数,则可以改用此查询:

SELECT t.attempt_number,
       SUM(CASE t.result WHEN TRUE THEN 1 ELSE 0 END) AS cleared,
       COUNT(*) AS total
  FROM (SELECT s.*,
               ROW_NUMBER() OVER(PARTITION BY athlete
                                 ORDER BY attempt_id) AS attempt_number
        FROM Jumper s) t
 GROUP BY t.attempt_number

这样,您可以将所有运动员的第一次尝试分组,所有运动员的第二次尝试分组,依此类推...