Как повернуть столбец в строку, а также превратить заголовок столбца в значение строки в SQL?

SELECT 
  *
FROM 
  tutorial.worldwide_earthquakes

Как повернуть столбец в строку, а также превратить заголовок столбца в значение строки в SQL?

И я хочу переформатировать стать таким,

Как повернуть столбец в строку, а также превратить заголовок столбца в значение строки в SQL?

Я думаю, что я должен использовать CROSS JOIN для поворота заголовка столбца к значению строки (year_2000 до 2000) и транспонировать количество землетрясений в значение n. Очень признателен за любую подсказку или помощь.

Примечание. Вы можете попробовать этот набор данных в режиме

Спасибо за напоминание, извините, что пропустил. Я использую приложение Mode для запуска этого запроса

Ido Yudhatama 12.12.2020 17:41

«Я думаю, что мне следует использовать CROSS JOIN». Как правило, соединения делают наборы данных шире, и вы хотите сделать свой набор данных более узким (и, как следствие, более длинным).

Caius Jard 12.12.2020 18:08
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из методов 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);

. . . продолжает шаблон (и последний не заканчивается запятой).

Спасибо, Гордон, я попробовал это в режиме и выдал сообщение об ошибке.

Ido Yudhatama 12.12.2020 17:30

Похоже, что-то пошло не так с вашим запросом. org.postgresql.util.PSQLException: ОШИБКА: синтаксическая ошибка в или около «LIMIT» Позиция: 1405 ALL LIMIT 100 ^

Ido Yudhatama 12.12.2020 17:31

@IdoYudhatama . . . В этом запросе нет LIKMIT, поэтому происходит что-то очень странное. Я подозреваю, что запрос смешивается между тем, что вы вводите, и тем, что получает база данных.

Gordon Linoff 12.12.2020 17:35

Я попытался снять ограничение на 100, и все еще появляется другое сообщение об ошибке.

Ido Yudhatama 12.12.2020 17:54

org.postgresql.util.PSQLException: ОШИБКА: синтаксическая ошибка в конце ввода Позиция: 1404 UNION ALL ^

Ido Yudhatama 12.12.2020 17:54

... в ответе Гордона означает «вы должны закончить узор самостоятельно». Не заканчивайте свой SQL на UNION ALL (когда вы пишете union all, что-то должно следовать за ним). Как будто вы сказали: «Как мне сложить все числа от 1 до 10?» а Гордон сказал "вы идете 1+2+3+..." и вы не закончили узор, или сделали, но написали "1+2+3+4+5+6+7+8+ 9+10+" и оставил плюс в конце - UNION ALL как +

Caius Jard 12.12.2020 18:02

Да, я пропустил. Я заканчиваю оператором UNION ALL. Спасибо @CaiusJard

Ido Yudhatama 12.12.2020 18:55

Спасибо @GordonLinoff, оба ваших решения действительно работают. Очень ценю

Ido Yudhatama 12.12.2020 18:56

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