web-dev-qa-db-ja.com

GROUPBY句を使用したCOUNTのMySQLSUM

クエリの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

orderIDなど

jss_order_extrafields

exid、orderID、extrafieldID、extrafieldName、content

これは現在、次のようにデータを返します。

COUNT()| orderID |等

1 | 99

1 | 104

1 | 106

COUNT()列のSUMを返す必要があります。したがって、上記の3つの例では、_3_を返します。

どうもありがとう

11
Jeepstone

あなたの質問は正確には明確ではありませんが、すべてのorderssum()だけが必要な場合は、次のようなものを使用できるはずです。

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
24
Taryn

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とORDERBYは相互に排他的です。 ただし、ソート順は引き続きある程度制御できます。 MySQLのGROUPBYは結果を並べ替えます。また、GROUP BYリストで指定された列で明示的なASCおよびDESCキーワードを使用して、個々の列の並べ替え順序を指定できます。

9
Dave S.