14

お問い合わせは以下のとおりとさSUMせていただきます。COUNTこのクエリは、各行のカウントを適切に (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、コンテンツ

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

カウント() | オーダーID | 等

1 | 99

1 | 104

1 | 106

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

どうもありがとう

4

2 に答える 2

30

あなたの質問は明確ではありませんがsum()、 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 は結果を並べ替えます。明示的な ASC および DESC キーワードを GROUP BY リストで指定された列に使用して、個々の列の並べ替え順序を指定できます。

于 2013-02-14T17:07:29.457 に答える