例如,我有一个用于跟踪跳高运动员的数据库表 Jumper。它包含三列相关信息:attempt_id、运动员和结果(一个 bool 值,表示跳投者是否越过了栏杆)。
我想编写一个查询来比较所有运动员在不同尝试中的表现,生成一个包含以下信息的表格:尝试次数、清除尝试次数、总尝试次数。换句话说,运动员在 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
这样,您可以将所有运动员的第一次尝试、所有运动员的第二次尝试分组,依此类推...
关于sql - 当顺序很重要时查询成功尝试的分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500215/