Команда SQL ORDER BY не работает с GROUP BY

Я создаю новую таблицу, которая суммирует значения из таблицы 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
);

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

John Conde 27.04.2018 20:46

Я думаю, что главный вопрос здесь в том, почему здесь важен порядок вставки? Помимо ответа @Andomar (который правильный).

Jacob H 27.04.2018 20:50

Для моего задания вопрос хотел, чтобы они возвращались в порядке item_id

oliver thomas 27.04.2018 20:53

Отметьте свой вопрос с помощью базы данных, которую вы используете.

Gordon Linoff 27.04.2018 21:30

Я не понимаю, какое отношение имеет group by к этому вопросу, поскольку (по крайней мере, в Oracle) предложение order by здесь недействительно. Фактический вопрос, кажется, ORDER BY не разрешен в CREATE TABLE AS SELECT.

William Robertson 28.04.2018 14:28
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
5
76
3

Ответы 3

Строки в таблице базы данных хранятся в произвольном порядке. Поэтому указание order by при заполнении таблицы не работает.

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

спасибо за ответ, извините, я совсем новенький. Быстрый последующий вопрос, он сработал, однако его заказали 1, 10, 11, 12 ... вместо 1, 2, 3 ... любой шанс, что вы могли бы помочь. извините, если это глупый вопрос.

oliver thomas 27.04.2018 20:52

Вы можете сортировать строки как целые числа, например order by cast(item_id as integer) (см. stackoverflow.com/questions/11808573/sql-order-string-as-num‌ber). Но помните, что MySQL может возвращать строки таблицы в любом порядке, который он выберет, если вы не укажете order by. Сначала это может показаться последовательным, но нет никаких гарантий.

Andomar 27.04.2018 20:54

Обновлено Вы можете использовать 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;

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

Другие вопросы по теме