Расчет комиссии - PullRequest
       29

Расчет комиссии

1 голос
/ 28 января 2011

Я пытаюсь рассчитать комиссионные, выплачиваемые клиентам в начале каждого месяца (при условии, что их комиссия превышает £ 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' в ', где предложение'.

Затем я попытался

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

Это дает мне ошибку: 1111 - Неправильное использование группыфункция.

Я нахожусь в тупике, любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 28 января 2011

Для вашей первой попытки это не сработало, потому что вы не можете использовать вычисляемые поля в предложении SELECT в предложении WHERE (WHERE обрабатывается до того, как поля будут вычислены).

Для второй попытки это не сработало, потому что вы не можете использовать агрегатные функции в предложении WHERE. Опять же, просто придерживайтесь своей первой попытки, но измените ГДЕ на ИМЕЮ.

Существует также более общая проблема, заключающаяся в том, что ваша функция 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 голосов
/ 28 января 2011

Вы должны указать 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, когда вам нужны GROUP условия, такие как SUM, MAX и т. Д.

...