当前位置: 首页 > 知识库问答 >
问题:

子查询组(按不同列)

那正初
2023-03-14

我有一个查询的简化版本,如下所示:

SELECT count_last_8, goals_8, count_last_16, goals_16 FROM (
            
                (SELECT COUNT(*) AS count_last_8,  f_total_ftg AS goals_8
                            FROM (SELECT * FROM results ORDER BY f_datetime LIMIT 8 ) AS X ) last_8g,
                                
                 (SELECT COUNT(*) AS count_last_16, f_total_ftg AS goals_16
                            FROM (SELECT * FROM results ORDER BY f_datetime LIMIT 16 ) AS X ) last_16g
                        )

Results表中还有两列-F_Player1F_Player2,我希望按Distincent播放器对查询进行分组

所以玩家的名单是:

SELECT DISTINCT f_player1 AS player FROM results UNION SELECT DISTINCT f_player2 AS player FROM results

如何添加此条件以使每个表别名(last8glast16g)适用于这些不同的播放器?

具有当前查询的示例数据:

count_last_8    |   goals_8    | count_last_16   |  goals_16
    8                 4                16              4

我想要的是这样的:

  player  |   count_last_8    |   goals_8    | count_last_16   |  goals_16
    kray           2                 2                4              9
    peli           1                 3                3              7
    etc...

共有1个答案

禄星腾
2023-03-14

这是相当难理解你的问题,如果有一个真实的数据样本,也有一个真实的基于提供的样本的预期结果,这会容易得多。

但是,我尝试了一些东西,它可能是解决办法,也可能会帮助你:

SELECT 
  T1.player, 
  T1.count_last_8, 
  T1.goals_8, 
  T2.count_last_16, 
  T2.goals_16
FROM(
  SELECT 
    f_player1 AS player, 
    SUM(c1) AS count_last_8, 
    SUM(c2) AS goals_8
  FROM(
    SELECT 
      f_player1, 
      COUNT(f_player1) AS c1, 
      SUM(f_total_ftg) AS c2 
    FROM(
      SELECT * 
      FROM 
        results
      ORDER BY f_datetime
      LIMIT 8
    ) ST1
    GROUP BY f_player1
    UNION ALL
    SELECT 
      f_player2, 
      COUNT(f_player2) AS c1, 
      SUM(f_total_ftg) AS c2 
    FROM(
      SELECT * 
      FROM 
        results
      ORDER BY f_datetime
      LIMIT 8
    ) ST2
    GROUP BY f_player2 
  ) ST3
  GROUP BY f_player1
) T1
JOIN
(
  SELECT 
    f_player1 AS player, 
    SUM(c1) AS count_last_16, 
    SUM(c2) AS goals_16
  FROM(
    SELECT f_player1, 
    COUNT(f_player1) AS c1, 
    SUM(f_total_ftg) AS c2 
    FROM(
      SELECT * 
      FROM 
        results
      ORDER BY f_datetime
      LIMIT 16
    ) ST4
    GROUP BY f_player1
    UNION ALL
    SELECT 
      f_player2, 
      COUNT(f_player2) AS c1, 
      SUM(f_total_ftg) AS c2 
    FROM(
      SELECT * 
      FROM 
        results
      ORDER BY f_datetime
      LIMIT 16
    ) ST5
    GROUP BY f_player2
  ) ST6
  GROUP BY f_player1
) T2
ON T1.player = T2.player

请参阅此处的演示

 类似资料:
  • 问题内容: 我正在尝试在postgres中的查询中使用group by。我无法按照我想要的方式对其进行工作,以便根据需要对结果进行分组。 这是对我刚刚回答的递归查询的另一个堆栈问题的扩展。但是现在我需要能够将结果分组到最终查询的root_id列上。这是之前的查询: 这是我想做的,以便将具有相同parent_comment_id的所有记录保存在一起。 可能有许多记录返回了相同的parent_comm

  • 问题内容: 这是我正在尝试做的事情和获得的最简单的工作示例: 我有一个查询,如下所示: 注意: tran_party.team_id_redirect 是引用 team.team_id 的外键。 电流输出: 预期产量: 我希望列中的重复项仅被选择一次,如下所示: 我试过的 我写了一个内联视图,而不是直接从中选择,而是从tran_party中选择不同的值,如下所示: 尽管这确实给了我预期的输出,但是

  • 问题内容: 如何在按部分分组的查询中使用子查询? 我使用SQL Server 2008 R2和Delphi 2010 我收到此错误: 像这个查询: 按t1.sen分组 问题答案: 这是真实的方式

  • 我是sql的新手,我需要帮助这个例子使用子查询。 我需要在Amanda和Uamanda下获取所有customerId,但现在我只有这个CustomerID100456。 我如何使用这个customerid100456 combain子查询来获取Amanda和uamanda下的所有数据。 这是我想要的预期结果

  • 我有一个疑问。我有一个表,其中有些记录重复日期时间。我必须把最后一个从日期时间重复的地方拿来。示例: 它应该返回ID3、4和7 你能帮我吗?谢谢!

  • 问题内容: 经过一些帮助MSChart-强制从Origin绘制折线图]后,我设法将以下MSSQL查询放在一起,以用于折线图。 但是,我有一个问题。该查询返回类似以下内容的内容: 这意味着我每天都在阅读,而实际上每个不同的值仅需要一行。在每种情况下,我都希望它第一次出现,因此对于上面的示例,我希望查询返回: 我看了看似是基于类似前提的几个问题,但是所有答复都是针对特定情况而量身定制的(有些甚至使用L

  • 对于每个成员(作者),我有一个字段来存储成员性别。(Homme/Somme)。 数据存储在我的数据库中,wp_usermeta。 元键是“性别”,元值是“男人”或“女人”。 我试图写一个wp查询来显示所有作者的所有帖子,但只有“Homme”作者,另一个只有“女性”。 以下是我的wp查询,用于显示所有帖子,无需按性别筛选: 工作正常。 这是我到目前为止试图只从“男人”性别获得的帖子,但它不起作用。。

  • 我有一张这样的桌子: MySQL>按id限制11从MyTable顺序中选择id、书籍、章节、段落、RevisionNum; 要找到没有未修改段落的书籍或章节,我希望查询该章节或书籍的所有不同id的最大值的最小值,或者以某种方式确定没有id保持未编辑(MAX(RevisionNum)为零)。 我的大多数约会尝试都以这样的错误告终: ...而我根本就没有使用“group by”函数! 下面的查询生成结