SELECT
*
FROM
tutorial.worldwide_earthquakes
И я хочу переформатировать стать таким,
Я думаю, что я должен использовать CROSS JOIN для поворота заголовка столбца к значению строки (year_2000 до 2000) и транспонировать количество землетрясений в значение n. Очень признателен за любую подсказку или помощь.
Примечание. Вы можете попробовать этот набор данных в режиме
«Я думаю, что мне следует использовать CROSS JOIN». Как правило, соединения делают наборы данных шире, и вы хотите сделать свой набор данных более узким (и, как следствие, более длинным).
Один из методов union all
:
SELECT magnitude, 2000 as year, year_2000 as n
FROM tutorial.worldwide_earthquakes
UNION ALL
SELECT magnitude, 2001 as year, year_2001 as n
FROM tutorial.worldwide_earthquakes
UNION ALL
. . .
Запрос заканчивается на SELECT
, а не на UNION ALL
.
Но в Postgres я бы рекомендовал боковое соединение:
SELECT we.magnitude, v.year, v.n
FROM tutorial.worldwide_earthquakes we CROSS JOIN LATERAL
(VALUES (2000, year_2000),
(2001, year_2001),
. . .
) v(year, n);
. . .
продолжает шаблон (и последний не заканчивается запятой).
Спасибо, Гордон, я попробовал это в режиме и выдал сообщение об ошибке.
Похоже, что-то пошло не так с вашим запросом. org.postgresql.util.PSQLException: ОШИБКА: синтаксическая ошибка в или около «LIMIT» Позиция: 1405 ALL LIMIT 100 ^
@IdoYudhatama . . . В этом запросе нет LIKMIT
, поэтому происходит что-то очень странное. Я подозреваю, что запрос смешивается между тем, что вы вводите, и тем, что получает база данных.
Я попытался снять ограничение на 100, и все еще появляется другое сообщение об ошибке.
org.postgresql.util.PSQLException: ОШИБКА: синтаксическая ошибка в конце ввода Позиция: 1404 UNION ALL ^
...
в ответе Гордона означает «вы должны закончить узор самостоятельно». Не заканчивайте свой SQL на UNION ALL (когда вы пишете union all, что-то должно следовать за ним). Как будто вы сказали: «Как мне сложить все числа от 1 до 10?» а Гордон сказал "вы идете 1+2+3+..." и вы не закончили узор, или сделали, но написали "1+2+3+4+5+6+7+8+ 9+10+" и оставил плюс в конце - UNION ALL
как +
Да, я пропустил. Я заканчиваю оператором UNION ALL. Спасибо @CaiusJard
Спасибо @GordonLinoff, оба ваших решения действительно работают. Очень ценю
Спасибо за напоминание, извините, что пропустил. Я использую приложение Mode для запуска этого запроса