让我们说,例如,我有一个用于跟踪高跳线的数据库表跳线。它有三个感兴趣的列:attempt_id,athlete和result(跳线是否清除了条形的布尔值)。
我想写一个比较所有运动员的查询。不同尝试的性能产生一个包含此信息的表:尝试次数,清除次数,总尝试次数。换句话说,运动员在x尝试中清除障碍的几率是多少。
编写此查询的最佳方法是什么?它比起初看起来更棘手,因为你需要确定每个运动员的总计最终总数的尝试次数。
我希望用Django ORM编写答案,但SQL也会被接受。
编辑:要明确,我需要通过尝试而不是运动员进行分组。所以所有的运动员都应该这样做。结合x尝试。
答案 0 :(得分:1)
您可以使用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
通过这种方式,您可以对所有运动员的每次首次尝试进行分组,所有运动员每次进行第二次尝试,等等...