2017-07-29 10 views
2

カート内の各製品の値を合計することによって、1人のユーザーのカート内の合計製品を計算したいと考えています。データベース内の複数の列のMysql SUMを得る方法

SELECT *, SUM(quantity) OVER (PARTITION BY product_id ORDER BY id) AS TotalProducts 
    FROM cart WHERE user_id ='$user_id'; 

取得エラー:

私はこのクエリ使用していDBスキーマと

SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(PARTITION BY product_id ORDER BY id)

EDITを

id | product_id | quantity | user_id 
1 | 37   | 2  | 23847 
2 | 70   | 2  | 23847 

私は何が間違っているのか分かりません。 MySQLでは

+1

'TotalProducts AS、' <<<それはタイプミスだ、一つにはそのコンマを削除します。 –

+0

@ Fred-ii-:カンマが削除されたままでも –

答えて

2

を私はMariaDBの構文に慣れていないよ、あなたはあなたのスキーマを示さなかったが、ここでの答えで私のショットです:

SELECT c.*, 
    SUM(c.quantity) as `TotalProducts` 
FROM cart c 
WHERE c.user_id = '$user_id' 
GROUP BY c.user_id 

それとも、あなたが製品ごとの合計をしたい場合は、あなたが使用できます。

SELECT c.*, 
    SUM(c.quantity) as `TotalProducts` 
FROM cart c 
WHERE c.user_id = '$user_id' 
GROUP BY c.user_id, c.product_id 
+0

これは正しいです。 –

+0

それはあなたのために働いてうれしい。それを受け入れていただきありがとうございます! –

1

、あなたが相関サブクエリを使用することができます

SELECT c.*, 
     (SELECT SUM(c2.quantity) 
     FROM cart c2 
     WHERE c2.user_id = c.user_id AND 
       c2.product_id = c.product_id AND 
       c2.id <= c.id 
     ) as TotalProducts 
FROM cart c 
WHERE user_id = '$user_id'; 
+1

なぜグループを使用して合計するのはなぜですか?また、いくつかのマイナーなタイプミス: '' 'produt''と' 'as AS''のように。 –

+0

はい、タイプミスがあります。それ以外の場合は機能は動作しますが、正しい結果が得られません。ユーザーは2つのXのproduct_id = 37 + 2のXのproduct_id = 70を持っています.2つしか得られません。私は4になるはずです。 –

+0

@SebastianFarham。 。 。元の定式化には 'product_id'によるパーティションがあり、これはこれを実装しています。あなたがそれを意図していない場合は、別の質問をして、サンプルデータと望ましい結果を提供してください。 –

関連する問題