2009-06-28 18 views
1

私はこのSQL持っている:mySQLの合計カラム数!

SELECT * , (
xnum * xprice 
) AS amount, SUM(xnum * xprice) AS total 
FROM xxbasket 
LEFT JOIN xxsubproduct 
USING (xsubproduct_id) 
LEFT JOIN xxcolor 
USING (xcolor_id) 
WHERE xuserid = '3' 

私が使用してSUM(XNUM * xprice)私に一つだけの行を与え、それはの総ASを、私はこのSUM(XNUM * xprice)を削除するとき、それは私にすべての行を与えるのです

私の質問はどのように私は合計を得ることができますか?私はクエリからすべての行が必要ですか?

+1

1つのクエリで2つのことをしようとしているようではありません。 2つのクエリにブレーキをかけるか、2つのサブクエリを書き込んでからJOINを実行します。 – mfloryan

+0

@mfxサブクエリーを作成する方法がわからないので、サブクエリーを作成して一緒に結合する方法を説明してください。 – mehdi

+0

[OK]を、私はこのSELECT *のような2つのサブクエリ、に侵入( XNUM * xprice )xxbasket の量、色AS xxcolor.xcode、ProductCodeをAS xxsubproduct.xcode、( SELECT SUM(XNUM * xprice) AS xuserid = '3' )xxbasket 左から合計 AS(xsubproduct_idを使用したxxsubproduct のJOIN) LEFT(xcolor_idを使用したxxcolor のJOIN)xuserid = '3' には、今取り組んでいるが、数字は無関係です! – mehdi

答えて

2

合計は、選択したすべての行にわたる値(xnum * xprice)の合計が計算される関数です。結果は1行になります。

複数の行グループの合計を計算する場合は、グループにグループ化するGROUP BY句を使用できます(例:where句の代わりにGROUP BY useridを使用すると、SUM(xnum * xprice)ユーザー)

0

SUM()関数は、集計演算子です。関連付けられている選択は、個々の行を返すことはできなくなり、行のグループに関する情報のみを返します。

しかし、サブクエリで合計を返すことができます。 xpriceカラムがxxsubproductテーブルにあると仮定した例を次に示します。

SELECT *, 
    xnum * xprice AS amount, 
    ( select sum(xnum * xprice) 
     FROM xxbasket 
     LEFT JOIN xxsubproduct USING xsubproduct_id 
     WHERE xuserid = '3' 
    ) as total 
FROM xxbasket 
LEFT JOIN xxsubproduct USING xsubproduct_id 
LEFT JOIN xxcolor USING xcolor_id 
WHERE xuserid = '3'