如何在单个sql查询中进行选择和求和


how to select and sum in single sql query

是否有可能或其他解决方案在单个sql查询中求和并选择多行,并在循环时打印:

$query = mysql_query("SELECT SUM(Total), * FROM table");
while ($fetch = mysql_fetch_row($query)) {
    echo $fetch[a];
    echo $fetch[b];
    echo $fetch[c];
}

将JOIN与计算总数的子查询一起使用。

SELECT SumTotal, a.*
FROM Table a
JOIN (SELECT SUM(Total) SumTotal
      FROM Table) b

你是这个意思吗?

SELECT (SELECT SUM(Total) FROM `table`) totalSum, a.* FROM `table` a

你可以按照@491243建议的来做

SELECT (SELECT SUM(Total) FROM `table`) AS totalSum, * FROM `table`

但不建议这样做,因为这将导致SQL Engine在从数据库中选择的每一行上计算列totalsum,并将具有结果的新列发送到列totalSum字段中具有相同值的php

最好进行2次查询。一个用于选择行,另一个用于获得总

我们可以使用CROSS APPLY进行计算。

SELECT SumTotal, A.* 
FROM table A 
CROSS APPLY (SELECT SUM(Total) SumTotal FROM Table) B

使用GROUP BY子句。

$query = mysql_query("SELECT *,SUM(Total) as TotalSUM FROM table GROUP BY Total");
    while ($fetch = mysql_fetch_row($query)) {
    echo $fetch[a];
    echo $fetch[b];
    echo $fetch[c];

    }

通常你想按列分组,这样你就可以按组求和,然后在这个例子中,它会为每个category_id提供单独的行

SELECT category_id, SUM(price) as totalprice
FROM products 
GROUP BY category_id 

在循环内求和而不是使用复杂查询更简单、更快吗?

你可以只做简单的(更快的)select * from table,在while循环中,在循环时求和。它将比使用子查询进行查询更快