Sql 订单重要时对成功尝试进行分组的查询
比如说,我有一个db桌式跳高器,用于跟踪跳高者。它有三列感兴趣的内容:尝试id、运动员和结果(一个布尔值,表示跳投者是否越过了障碍) 我想写一个查询,比较所有运动员在不同尝试中的表现,生成一个包含以下信息的表:尝试次数、清除尝试次数、总尝试次数。换言之,运动员在x次尝试时越过障碍的几率是多少 编写此查询的最佳方式是什么?这比一开始看起来要复杂得多,因为你需要确定每个运动员的尝试次数,才能计算出最终的总数 我希望答案是用Django ORM编写的,但也可以接受SQLSql 订单重要时对成功尝试进行分组的查询,sql,django,postgresql,django-orm,Sql,Django,Postgresql,Django Orm,比如说,我有一个db桌式跳高器,用于跟踪跳高者。它有三列感兴趣的内容:尝试id、运动员和结果(一个布尔值,表示跳投者是否越过了障碍) 我想写一个查询,比较所有运动员在不同尝试中的表现,生成一个包含以下信息的表:尝试次数、清除尝试次数、总尝试次数。换言之,运动员在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
编辑:如果尝试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
这样,您可以对所有运动员的第一次尝试、第二次尝试进行分组,以此类推……我添加了一个编辑,以防我的原始记录没有意义,但我需要按尝试而不是运动员对结果进行分组。这样,我可以找到所有运动员第一次尝试正确的百分比,例如。