PostgreSQL - Skriv ut längden av strängarna från kolumnen till höger
Uppgift:
You have access to a table of monsters as follows:
** monsters table schema **
id
name
legs
arms
characteristics
Your task is to make a new table where each column should contain the length of the string in the column to its right (last column should contain length of string in the first column). Remember some column values are not currently strings. Column order and titles should remain unchanged:** output table schema **
id
name
legs
arms
characteristics
Källa: https://www.codewars.com/kata/easy-sql-moving-values/train/sql
Jag lyckas skriva ut längden av kolumnen 'name' och döper den sedan till id på följande vis:
select id from (select char_length(name) from monsters) as "id";
Jag får då följande resultat:
Fråga:
Hur kan jag skriva om mitt query för att skriva ut alla kolumner i tabellen? Är jag på rätt spår?
(Försöker lösa uppgiften med PostgreSQL 9.6)
Jag tycker uppgiften är otydligt formulerad. Vad tycker du att en rad som
117 baloof 4 2 blue
ska ge för resultat?
Laguna skrev:Jag tycker uppgiften är otydligt formulerad. Vad tycker du att en rad som
117 baloof 4 2 blue
ska ge för resultat?
Så som jag tolkar uppgiften så tror jag att ditt exempel skulle ge
6 1 1 4 3
Dvs, alla utom den sista kolumnen (characteristics) kommer innehålla längden (antalet bokstäver/tecken/siffror) av sin högra "grannes" värden. Exempelvis kolumn id har name som sin högra kolumn. Låt säga att tabellen bara hade haft en rad enligt dina värden, så gissar jag att id hade fått längden 6 (längden av strängen baloof som finns i den högra kolumnen name i jämförelse med kolumn id). Sista kolumnen kommer innehålla längden av första kolumnen (id).
Lyckades lösa uppgiften nu på följande vis:
select
case when id is not null then char_length(name) end as id,
case when name is not null then LENGTH (CAST(legs AS TEXT)) end as name,
case when name is not null then LENGTH (CAST(arms AS TEXT)) end as legs,
case when name is not null then char_length(characteristics) end as arms,
case when name is not null then LENGTH (CAST(id AS TEXT)) end as characteristics
from monsters;