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

标签 sql django postgresql django-orm

例如,我有一个用于跟踪跳高运动员的数据库表 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/

相关文章:

sql - 如何在 postgresql 中将 json 数组转换为行

sql - 仅当 sum 大于某个值时才返回行

django - 将模板变量呈现为 HTML

django - 在我的 django 项目中使用 mypy 时出现问题

javascript - PostgreSQL 字符串比较

Django - 用作表达式的子查询返回不止一行

mysql - 具有多个子查询的查询优化

sql - SQL 中的分页 - 性能问题

python - 为什么 Django 的 HTTPResponseRedirect 对 PUT 使用相同的 HTTP 方法而不是 POST?

postgresql - Docker 容器在启动 Postgres DB 后立即停止