SQL sum并从第二个查询中添加两列

时间:2018-04-23 03:40:13

标签: php mysql sql

我试图将两位逻辑组合到一个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

遇到执行错误。

2 个答案:

答案 0 :(得分:2)

几乎在那里,你只需要加入自己来连接一个调用中的所有项目,然后按结果对结果进行分组,这样总和就可以处理所有链接的项目。

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

答案 1 :(得分:1)

您遇到错误,因为您正在执行聚合而不涉及任何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;