我试图将两位逻辑组合到一个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
遇到执行错误。
答案 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;