LINUX.ORG.RU

Вопрос по MySQL, формирование временных таблиц.


0

0

Вот например есть таблица:

mysql> select * from finance;
+------------+-------+------------+---------+
| subject_id | summ  | date       | notes   |
+------------+-------+------------+---------+
|       1415 | 40000 | 2004-02-22 | adfafad |
|       1416 |  2000 | 2004-01-15 | adfafad |
|       1416 | 50000 | 2004-02-25 | adfafad |
|       1417 | 32000 | 2004-03-05 | adfafad |
|       1417 | 10000 | 2004-03-28 | adfafad |
|       1417 | 12000 | 2004-04-13 | adfafad |
+------------+-------+------------+---------+

Помогите сделать запрос, который будет создавать временную 
таблицу с полями:
subject_id - то же, что и у исходной таблицы
summ - сумма для определенного subject_id
count - количество выплат
т.е. что бы в итоге получилось:

mysql> select * from finance_tmp;
+------------+-------+-------+
| subject_id | summ  | count |
+------------+-------+-------+
|       1415 | 40000 | 1     |
|       1416 | 52000 | 2     |
|       1417 | 54000 | 3     |
+------------+-------+-------+

Вот что я пытаюсь сделать:

CREATE TEMPORARY TABLE 
		finance_id
		TYPE = HEAP
	SELECT 
		subject_id 
	FROM 
		finance 
	UNION
	SELECT 
		subject_id 
	FROM 
		finance 
;
select * from finance_id;

CREATE TEMPORARY TABLE 
	finance_res
	TYPE = HEAP
SELECT
	subject_id, 
	SUM(summ)
FROM 
	finance 
UNION
SELECT
	subject_id
FROM
	finance_id 
WHERE 
	finance.subject_id = finance_id.subject_id
;

select * from finance_res;

Но выдает ошибку:
subject_id
1416
1415
1417
ERROR 1140 at line 16: Mixing of GROUP columns 
(MIN(),MAX(),COUNT()...) with no GROUP columns is illegal 
if there is no GROUP BY clause

В общем смысл ошибки понятен, но я не знаю как сделать
что бы ошибка не выдавалась. Подскажите как, и если мой
подход не правильный то как решить такую задачу правильно.

Очень желательно примеры, спасибо за внимание.
anonymous

Re: Вопрос по MySQL, формирование временных таблиц.

Вопрос решен:

CREATE TEMPORARY TABLE 
		finance_id
		TYPE = HEAP
	SELECT 
		subject_id 
	FROM 
		finance 
	UNION
	SELECT 
		subject_id 
	FROM 
		finance 
;
select * from finance_id;

CREATE TEMPORARY TABLE 
	finance_res
	TYPE = HEAP
SELECT
	finance.subject_id, 
	SUM(finance.summ)
FROM 
	finance,
	finance_id 
WHERE 
	finance.subject_id = finance_id.subject_id
GROUP by subject_id
;

select * from finance_res;

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.