2017-11-13 3 views
0

私は列の総量とすべての行を同時に取得しようとしています。SQLの合計とすべての行が1つになります

SELECT sum(orders.amount) as total, orders.transactionID, orders.itemid, products.id, 
products.category, products.price 
FROM db.orders 
INNER JOIN db.products 
ON orders.itemid = products.id 
WHERE transactionID = '012906ea51c14b0881c4785527c606dd' 

2番目のクエリは私にすべての行が、orders.amountの間違った合計を与えている間のみ、上記のクエリは私に合計値と一列のみ(私もすべての行を持ちたい)

SELECT sum(orders.amount) as total, orders.transactionID, orders.itemid, products.id, 
products.category, products.price 
FROM db.orders 
INNER JOIN db.products 
ON orders.itemid = products.id 
WHERE transactionID = '012906ea51c14b0881c4785527c606dd' 
GROUP BY orders.id 

を与えます

これはできますか?

(私は2つのクエリが少し短く)

おかげ

+0

どのように「間違っていますか? –

+0

私はすべての行の代わりに1行の合計を得るに過ぎないようです。 – Niels

+0

これは注文IDでグループ化したためです。行の集約(例:合計)を単一の出力として取得することも、すべての行データのダンプを取得することもできます。両方のクエリを1つのクエリで取得することはできません。それはSQLの仕組みではありません。両方のことを知りたければ、別々の2つのクエリーが必要です。または、データをダンプし、Excelのような他のツールでオフラインの「合計」部分を実行します。 – ADyson

答えて

2

あなたは、変数を使用して、意味、「実行中の合計」を使用して値を自分でまとめることができます。正しい合計が結果セットの最後の行に表示されます。常に1行を生成し、GROUP BYなし

クエリ1 .. SUM:

SELECT @my_sum := @my_sum + orders.amount as running_total, 
orders.transactionID, 
orders.itemid, 
products.id, 
products.category, 
products.price 
FROM db.orders 
INNER JOIN db.products 
ON orders.itemid = products.id 
CROSS JOIN (SELECT @my_sum:=0) AS var_init_subquery 
WHERE transactionID = '012906ea51c14b0881c4785527c606dd' 
  • もレイモンドNijlandさんのコメントを見ているユーザー変数

hereについては、こちらをご覧ください。クエリ2は、GROUP BY読み取り無効無効使用ですhttps://www.psce.com/en/blog/2012/05/15/mysql-mistakes-do-you-use-group-by-correctly/

+0

恐ろしい!あなたが述べた記事を読んで、説明と私の問題の解決に感謝します:) – Niels

関連する問題