【问题标题】:SQL sum and add two columns from second querySQL求和并从第二个查询中添加两列
【发布时间】:2018-10-03 00:37:45
【问题描述】:

我正在尝试将两位逻辑组合到一个 SQL 查询中以加快我的代码库的效率,我目前有两个这样的查询(伪代码):

// Looping each user in table
$statement = "SELECT id FROM users";

// I then loop that statement, combining data from sub-query
{
  // Get the "summing" data from table in reference to looped user
  $second_statement = "SELECT add_col_1,add_col_2FROM users WHERE ref = id"

  // Combine add_col_1, and add_col_2 together
  array_sum($second_statement)
}

我所追求的是第二条语句的总和,从第一个查询 SELECT id FROM users 中获取 ID,然后在列名 ref 下研究该表以获取参考,然后我可以将列从每一行。

我这样做不是为了得到一个语句而不是两个语句,这是因为一旦应用程序扩展,必须以指数方式查询成千上万的用户是不好的。

我试图联合这两个循环的语句是:

SELECT
   id,
   (SUM(SELECT col_add_1+col_add_2 FROM users WHERE ref = a.id)) AS total
FROM users a

执行错误。

【问题讨论】:

  • 你在同一张表上查询,那么为什么你先得到 id,然后再将它与同一张表的 ref 值进行比较,因为比较可以在第一个查询本身中完成

标签: php mysql sql


【解决方案1】:

几乎在那里,您只需加入自身即可在一次调用中链接所有项目,然后按 id 对结果进行分组,以便总和适用于所有链接项目。

SELECT
  a.id,
  SUM(b.col_add_1 + b.coll_add_2)
FROM
  users a
LEFT JOIN
  users b
ON
  a.id = b.ref
GROUP BY
  a.id

【讨论】:

  • 效果很好!非常感谢朋友:)
【解决方案2】:

您遇到了一个错误,因为您正在执行聚合而不涉及任何 group by 子句。因此,您应该将查询重写为

SELECT id,
       (SELECT SUM(col_add_1+col_add_2) FROM users WHERE ref = a.id) AS total
FROM users a
GROUP BY id;

【讨论】:

  • 更好的答案避免不必要的左连接!
猜你喜欢
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 2019-05-29
相关资源
最近更新 更多