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-「where句」の不明な列「totalSum」。

それから私は試しました

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

これにより、エラーが発生します:1111-グループ関数の使用が無効です。

私はこれに困惑しています、どんな助けもいただければ幸いです。

4

2 に答える 2

1

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

2回目の試行では、WHERE句で集計関数を使用できないため、機能しませんでした。繰り返しますが、最初の試みに固執しますが、WHEREを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;
于 2011-01-28T16:47:40.047 に答える
0

次のようなグループ化関数を使用するときに、データをグループ化する方法をMySQLに指示する必要があります。SUM

私はあなたがこのようなものを必要とすることを期待しています:

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;

などの基本的な条件HAVINGが必要な場合は、この関数を使用する必要がありますGROUPSUMMAX

于 2011-01-28T16:40:20.830 に答える