2011-01-28 17 views
1

私は毎月初めに手数料を計算しようとしています(手数料が25ポンド以上の場合)。ここで計算手数料

はSQLです:私はこれを実行すると

SELECT SUM(invoiceCommision) as totalSum 
FROM tbl_statement_items 
WHERE fk_rid = '1' 
    AND dt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 
    AND totalSum > 25; 

しかし、MySQLの言う:1054 - 不明な列 'TOTALSUM' 'where句' に。グループ機能の無効な使用を - 1111:

私はその後、これは私にエラーを与える

SELECT * 
FROM tbl_statement_items 
WHERE fk_rid = '1' 
    AND dt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 
    AND SUM(invoiceCommision) > 25; 

を試してみました。

私はこの1つに困惑しています。助けていただければ幸いです。あなたがGROUPを必要とするときは、HAVING関数を使用する必要があり

SELECT *, SUM(invoiceCommision) as commisionSum 
FROM tbl_statement_items 
WHERE fk_rid = '1' 
    AND dt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 
GROUP BY fk_rid 
HAVING commisionSum > 25; 

:あなたはこのようなSUM

としてグループ化機能を使用しているとき、私はあなたがこのような何かを必要と期待してどのようにグループのデータをMySQLを伝える必要があり

+0

誰かが答えを出してくれましたが、彼らの答えは消えました:S、ありがとう、ありがとう。それを受け入れるだろうが、ovsは傾ける。 –

+0

しかし、あなたは彼らがあなたに与えたもので自分自身を投稿し、それを受け入れることができます(私はあなたが待つ必要がある時間間隔があるかもしれないと思うが)。これは、スレッドに答えを与え、それを閉じ、ソリューションに沿って来る他の誰かを許可します。 –

+0

@ブラッド:スレッドに今すぐ答えがあります –

答えて

1

最初の試行では、SELECで計算フィールドを使用できないため、最初の試行では機能しませんでしたWHERE節のT句(WHERE句はフィールドが計算される前に処理されます)。

WHERE句で集計関数を使用できないため、2番目の試行では機能しませんでした。再び、あなたの最初の試みに固執するだけですが、どこをHAVINGに変更してください。

また、より一般的な問題として、SUM()関数はすべてのステートメントアイテムの合計を取得するだけで、クライアントごとに追加する必要があります。あなたは、クライアントごとの和のリストを取得するにはGROUP BYを使用することができ、かつ唯一のHAVING句は、合計でそれらを返すよりも大きい25

(それは実際にあるものは何でも変更CLIENT_ID)、これを試してみてください:

SELECT client_id, SUM(invoiceCommision) as totalSum 
FROM tbl_statement_items 
WHERE fk_rid = '1' AND dt > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) 
GROUP BY client_id 
HAVING totalSum > 25; 
+0

fk_rid、sum(invoiceCommision)as totalSum FROM tbl_statement_items WHERE fk_rid = '1'およびdt> DATE_SUB(CURDATE()、INTERVAL 1 MONTH) GROUP BY fk_rid。あなたはコードの作品を​​より良くして、前のものをよく覚えてください+1 ありがとうtotalSum> 25; –

0

SUM,MAXなど

+0

クリス:これは1111のエラーを再度返します。 –

+0

'invoiceCommision'はどこに定義されていますか? 'tbl_statement_items'テーブルの列ですか? – Chris

+0

はいinvoiceCommisionはtbl_statement_itemsにあります –