Я создаю новую таблицу, которая суммирует значения из таблицы 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
);
Я думаю, что главный вопрос здесь в том, почему здесь важен порядок вставки? Помимо ответа @Andomar (который правильный).
Для моего задания вопрос хотел, чтобы они возвращались в порядке item_id
Отметьте свой вопрос с помощью базы данных, которую вы используете.
Я не понимаю, какое отношение имеет group by к этому вопросу, поскольку (по крайней мере, в Oracle) предложение order by здесь недействительно. Фактический вопрос, кажется, ORDER BY не разрешен в CREATE TABLE AS SELECT.


Строки в таблице базы данных хранятся в произвольном порядке. Поэтому указание order by при заполнении таблицы не работает.
Вы должны использовать order by при выборе строк из таблицы, а не при вводе строк в таблицу.
спасибо за ответ, извините, я совсем новенький. Быстрый последующий вопрос, он сработал, однако его заказали 1, 10, 11, 12 ... вместо 1, 2, 3 ... любой шанс, что вы могли бы помочь. извините, если это глупый вопрос.
Вы можете сортировать строки как целые числа, например order by cast(item_id as integer) (см. stackoverflow.com/questions/11808573/sql-order-string-as-number). Но помните, что MySQL может возвращать строки таблицы в любом порядке, который он выберет, если вы не укажете order by. Сначала это может показаться последовательным, но нет никаких гарантий.
Обновлено Вы можете использовать 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
Это должно решить вашу проблему
Технически вы может упорядочиваете строки в таблице в большинстве баз данных. Вы делаете это, создавая кластерный индекс для ключей, используемых для упорядочивания.
Угадай, что?
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;
Кстати, использовать для этого временную таблицу не рекомендуется, если у вас нет особой необходимости материализовать набор результатов.
Пожалуйста, не используйте теги, которые не относятся к вашему вопросу. Я удалил теги базы данных, так как неясно, какой из них вы на самом деле используете. Добавьте тег Только к базе данных, которую вы фактически используете