代码之家  ›  专栏  ›  技术社区  ›  bkramer

订单重要时成功尝试分组查询

  •  1
  • bkramer  · 技术社区  · 7 年前

    比方说,我有一个db桌式跳投,用于跟踪跳高运动员。它有三个感兴趣的列:trunt\u id、athletator和result(一个布尔值,表示跳投者是否跳栏)。

    我想写一个查询,比较所有运动员在不同尝试中的表现,生成一个包含以下信息的表:尝试次数、清除尝试次数、总尝试次数。换言之,一名运动员在x次尝试时越过障碍的几率是多少。

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

    我希望答案是用Django ORM编写的,但也会接受SQL。

    编辑:要清楚,我需要按尝试分组,而不是按运动员分组。因此,这将是所有运动员的组合x尝试。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alex Zen    7 年前

    您可以使用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
    

    编辑: 如果trunt\u 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
    

    这样,您可以将所有运动员的第一次尝试、第二次尝试等分组。。。