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

PostgreSQL - Skriv ut max eller min beroende på om siffersumman är udda eller jämn

Uppgift:

Given a table of random numbers as follows:

** numbers table schema **

id
number1
number2
Your job is to return table with similar structure and headings, where if the sum of a column is odd, the column shows the minimum value for that column, and when the sum is even, it shows the max value. You must use a case statement.

** output table schema **

number1
number2

Källa: https://www.codewars.com/kata/sql-basics-up-and-down/train/sql

Mitt försök till att lösa uppgiften (med PostgreSQL 9.6):

SELECT id,number1,number2,
CASE
WHEN count(number1) % 2 = 0 THEN max(number1)
WHEN count(number1) % 2 != 0 THEN min(number1)
WHEN count(number2) % 2 = 0 THEN max(number2)
WHEN count(number2) % 2 != 0 THEN min(number2)
END
FROM numbers group by id;

Output:
Fråga:
Om jag har förstått uppgiften så skall jag få ett resultat med endast en rad och 2 kolumner där number1 och number2 antingen innehåller det största eller minsta värdet. Jag använder count för att summera antalet tal som finns i respektive kolumn. Varför skrivs aldrig max och min ut med min lösning? Jag använder ju funktionerna max och min.   

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

Jag lyckades lösa uppgiften på följande vis:

SELECT
(CASE
WHEN (sum(number1) % 2 = 0) THEN max(number1)
WHEN (sum(number1) % 2 != 0) THEN min(number1)
END) AS number1,
(CASE
WHEN (sum(number2) % 2 = 0) THEN max(number2)
WHEN (sum(number2) % 2 != 0) THEN min(number2)
END) AS number2
FROM numbers;

Svara Avbryt
Close