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.
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;