Команда SQL ORDER BY не работает с GROUP BY - PullRequest
0 голосов
/ 27 апреля 2018

Я создаю новую таблицу, которая суммирует значения из таблицы stock для каждого item_id и затем помещает их в новую таблицу. Это прекрасно работает, используя этот код:

create table total_stock as (
select item_id,
sum (stock) total_stock
from stock_tbl
group by item_id
);

, который работает нормально, добавляя все значения из таблицы stock и помещая их в новую таблицу, но когда я пытаюсь упорядочить его по item_id, он не работает. Любая помощь будет оценена. Данная ошибка является синтаксической ошибкой.

create table total_stock as (
select item_id,
sum (stock) total_stock
from stock_tbl
group by item_id
order by item_id
);

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Обновлено Вы можете использовать Common Table Expression, а затем использовать эти данные для вставки в вашу таблицу, как

with CTE as (
select item_id, sum(stock) total stock
from stock_table
) Insert into total_stock
select * from cte group by item_id order by item_id

Это должно решить вашу проблему

0 голосов
/ 27 апреля 2018

Технически, вы можете упорядочивать строки в таблице в большинстве баз данных. Это делается путем создания кластерного индекса по ключам, используемым для упорядочения.

Угадай, что?

select t.*
from t

все равно не возвращает строки по порядку, даже в таблицах с кластеризованным индексом. * По крайней мере, нет гарантии. * Наборы результатов SQL неупорядочены, если только ORDER BY явно не включено для самого внешнего SELECT. Единственная гарантия при заказе набора результатов - использовать order by. В вашем случае это будет:

select item_id, sum(stock) as total_stock
from stock_tbl
group by item_id
order by item_id;

или

select ts.*
from total_stock ts
order by item_id;

Кстати, использование временной таблицы для этого не рекомендуется, если у вас нет особой необходимости материализовать набор результатов.

0 голосов
/ 27 апреля 2018

Строки в таблице базы данных хранятся без какого-либо определенного порядка. Вот почему указание order by при заполнении таблицы не работает.

Вы должны order by при выборе строк из таблицы, а не при вводе строк в таблицу.

...