2013-09-10 5 views
1

У меня есть таблица, как этотРассчитать правильное количество в запросе?

| customer_id | item_id | price | amount | 

Я хочу, чтобы получить сумму денег, каждый клиент провел в одном запросе.

Я попытался:

SELECT SUM(price * amount) AS total FROM table GROUP BY customer_id 

но выплевывает астрономически высокие значения total. Это не может быть правильно.

Я также попытался

SELECT @total := @total + (price * amount) AS total FROM table 
CROSS JOIN (SELECT @total := 0) CONST 
GROUP BY customer_id 

, но это не начинается с 0 для каждого клиента, поэтому предыдущие итоги будут складывают ...

Как правильно восстановить данные, которые я хочу?

ответ

2

Ваш первоначальный запрос является правильным:

SELECT SUM(price * amount) AS total 
FROM table 
GROUP BY customer_id; 

(хотя я бы включил customer_id в пункте SELECT.)

Если у вас есть «астрономически высокие значения», то этот вопрос ваши данные. Вполне возможно, проблема в том, что «цена» действительно «общая» для каждой строки.

1

Вы должны добавить идентификатор клиента в свое предложение select.

+0

Это не имеет ничего общего с расчетом общей суммы. –

+0

Вопрос "каждый клиент" –

+0

. , Агрегация определяется предложением 'group by'. Наличие столбцов в предложении 'select' не влияет на количество строк, созданных запросом. Я согласен с тем, что 'customer_id' должен находиться в предложении' select', но это не было проблемой в запросе. –

0

Я думаю, что ваш запрос должен быть правильным. Я пытался на моем сервере следующее:

create table test (customer_id int, item_id int, price money, amount int) 

insert test values (1,1,10,2) 
insert test values (1,2,12,4) 

insert test values (2,1,10,2) 
insert test values (2,3,5,1) 
insert test values (2,4,0.5,21) 

SELECT customer_id,sum(price*amount) FROM test 
GROUP BY customer_id 
0

Я думаю, что нужно что-то вроде этого:

select customer_id,sum(price * amount) from table group by customer_id 
Смежные вопросы