TB16 är nöjd med hjälpen
TB16 182 – Fd. Medlem
Postad: 11 maj 2019 09:02

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)

Laguna Online 28445
Postad: 11 maj 2019 13:32

Jag tycker uppgiften är otydligt formulerad. Vad tycker du att en rad som

117 baloof 4 2 blue

ska ge för resultat? 

TB16 182 – Fd. Medlem
Postad: 12 maj 2019 13:42
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). 
 

TB16 182 – Fd. Medlem
Postad: 12 maj 2019 17:43

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;

Svara Avbryt
Close