sql - 在与另一个表合并之前按一个参数对一个表进行分组

标签 sql postgresql merge

我已经成功合并了 3 个表(使用 ID),但是当我尝试添加第 4 个表时 - 输出完全困惑(值变得不切实际/错误),所以我认为我与以下事实有关:第四个表具有未分组的 ID,因此我需要在加入这个新表之前对它们进行分组。现在的查询如下:

SELECT name, SUM(money) AS MONEY
FROM transactions
JOIN results ON transactions.id = results.id
JOIN more ON results.per_id = more.per_id
GROUP BY name
HAVING SUM(money)>500

当我加入新表时:

SELECT name, SUM(money) AS MONEY, SUM(data_from_NT1), SUM(data_from_NT2)
FROM transactions
JOIN results ON transactions.id = results.id
JOIN more ON results.per_id = more.per_id

JOIN newtable ON results.per_id = newtable.per_id

GROUP BY name
HAVING SUM(money)>500

是否可以执行命令 GROUP BY per_id:

(JOIN newtable ON results.per_id = newtable.per_id GROUP BY per_id)

在将此新表添加到主表中之前?上面的行不起作用。

最佳答案

是的,这是可能的,但你必须将其写为 SELECT。这是可能答案的第一个版本:

SELECT name,
       SUM(money)             AS money,
       SUM(nt2.data_from_NT1) AS data_from_NT1,
       SUM(nt2.data_from_NT2) AS data_from_NT2
  FROM transactions AS t
  JOIN results      AS r ON t.id = r.id
  JOIN more         AS m ON r.per_id = m.per_id
  JOIN (SELECT per_id, SUM(data_from_NT1) AS data_from_NT1, SUM(data_from_NT2) AS data_from_NT2
          FROM newtable GROUP BY per_id
       ) AS nt2 ON results.per_id = nt2.per_id
 GROUP BY name
HAVING SUM(money) > 500;

尚不完全清楚您是否需要主选择列表中的“SUM of SUM”;你可能不知道。也不清楚 namemoney 列从何而来;我通常也会在它们前面加上适当的表别名。有了这些警告,这可能更接近您所追求的:

SELECT name, SUM(money) AS MONEY, nt2.data_from_NT1, nt2.data_from_NT2
  FROM transactions AS t
  JOIN results      AS r ON t.id = r.id
  JOIN more         AS m ON r.per_id = m.per_id
  JOIN (SELECT per_id, SUM(data_from_NT1) AS data_from_NT1, SUM(data_from_NT2) AS data_from_NT2
          FROM newtable GROUP BY per_id
       ) AS nt2 ON results.per_id = nt2.per_id
 GROUP BY name, nt2.data_from_NT1, nt2.data_from_NT2
HAVING SUM(money) > 500;

毫无疑问还有其他方法可以写这个。主查询中的分组可能更好地放入并行子查询中,而在主查询中保留简单的直接联接。但我们没有信息来实际为您做到这一点。

关于sql - 在与另一个表合并之前按一个参数对一个表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10057438/

相关文章:

database - 将自定义类型数组插入 postgresql-9.4 中的表列?

sql-server - 空值和 MERGE 语句 : I need to set a value to infinity. 如何?

ruby-on-rails - routes.rb - 不支持 Controller 名称

postgresql - 截断 Postgres 数据库中的所有表

r - 如何保留原始列以便在 r 中两个数据库的 full_join() 中进行比较

sql - 带有合并语句的级联副本导致锁定问题

java - 如何使用 BindBeans 将字符串列表输入到 SQL

mysql - SQL输出精简

mysql - 如何合并两个MySQL表

sql - 如何在 JPA 命名查询的 IN 子句中使用动态参数?