14

我希望SUMCOUNT一个查询如下。此查询为每一行正确返回计数 (1),但不确定如何将它们全部加起来。

SELECT COUNT(*), jss_orders_headers.*  FROM jss_orders_headers
LEFT JOIN jss_orders_extrafields
ON jss_orders_headers.orderID = jss_orders_extrafields.orderID
AND jss_orders_extrafields.extraFieldID = 5
GROUP BY jss_orders_headers.orderID
ORDER BY jss_orders_headers.orderID DESC

表结构是

jss_order_headers

订单ID等

jss_order_extrafields

exid、orderID、extrafieldID、extrafieldName、内容

这当前返回数据如下:

计数() | 订单号 | ETC

1 | 99

1 | 104

1 | 106

我需要返回列SUMCOUNT()。因此,在上面的 3 个示例中,我将返回3.

非常感谢

4

2 回答 2

30

你的问题并不完全清楚,但如果你只想要sum()of all orders,那么你应该能够使用这样的东西:

select sum(TotalByOrder) TotalOrders
from
(
  SELECT COUNT(*) TotalByOrder, jss_orders_headers.*  
  FROM jss_orders_headers
  LEFT JOIN jss_orders_extrafields
    ON jss_orders_headers.orderID = jss_orders_extrafields.orderID
    AND jss_orders_extrafields.extraFieldID = 5
  GROUP BY jss_orders_headers.orderID
) src
于 2013-02-15T17:18:19.543 回答
13

WITH ROLLUP做你需要的吗?

SELECT COUNT(*), jss_orders_headers.*  FROM jss_orders_headers
LEFT JOIN jss_orders_extrafields
ON jss_orders_headers.orderID = jss_orders_extrafields.orderID
AND jss_orders_extrafields.extraFieldID = 5
GROUP BY jss_orders_headers.orderID DESC WITH ROLLUP

为什么没有ORDER BY

使用 ROLLUP 时,也不能使用 ORDER BY 子句对结果进行排序。换句话说,ROLLUP 和 ORDER BY 是互斥的。但是,您仍然可以控制排序顺序。MySQL 中的 GROUP BY 对结果进行排序,您可以对 GROUP BY 列表中命名的列使用显式 ASC 和 DESC 关键字来指定各个列的排序顺序。

于 2013-02-14T17:07:29.457 回答