/CodeWarsKatasSQL

My solutions to the SQL katas from CodeWars.

CodeWarsKatasSQL

Minhas soluções para os Katas (exercícios) de SQL do CodeWars desde 17 de Fevereiro de 2022, quando passei a usar a plataforma para praticar SQL Server.

Profile badge

Sobre o Codewars

Codewars é uma plataforma que te ajuda a aprender, treinar e melhorar suas habilidades de código resolvendo exercícios (chamados de Katas) de programação de vários tipos e níveis de dificuldade. Você escolhe como quer aprender. Quer resolver exercícios cada vez mais desafiadores? Ou prefere treinar através de repetição e melhorando suas soluções? Depois de resolver um Kata, você pode comparar sua solução com a de outros usuários e, com isso, aprender com elas ou ensinar usuários menos experientes respondendo as dúvidas deles.

Sistema de níveis

Ranks são usados para indicar a proficiência de usuários e dificuldades dos Katas. Existem duas classes de ranks, Kyu e dan, que são divididos em 8 níveis cada. Em ordem de proficiência/dificuldade:

8 Kyu até 1 Kyu
1 Dan até 8 Dan

Por que os nomes Kyu and Dan? São termos emprestados do sistema de artes marciais japonesas, que por sua vez são emprestadas do jogo Go. Kyu (or Kyū) indica o número de graus até o nível mestre (Dan). É por isso que são contados de forma descrescente. Ao alcaçar o nível mestre, passamos a contar de forma crescente. Faixas pretas nas artes marciais são nível Dan.

CodeWars Leveling System

Minhas soluções

6 Kyu

SELECT 
  'US' as location,
  *  
FROM ussales
WHERE price > 50.00
UNION ALL
SELECT 
  'EU' as location,
  *  
FROM eusales
WHERE price > 50.00
ORDER BY location DESC, id;
SELECT 
  age,
  COUNT(name) AS total_people
FROM people
GROUP BY age
HAVING COUNT(id) >= 10; /* nao pode usar o alias total_people porque o SELECT é processado depois do HAVING */
SELECT 
  customer.customer_id, 
  customer.email, 
  COUNT(payment.payment_id) AS payments_count,
  CAST(SUM(payment.amount) AS float) AS total_amount
FROM customer
LEFT JOIN payment
  ON customer.customer_id = payment.customer_id
GROUP BY customer.customer_id
ORDER BY total_amount DESC
LIMIT 10;

7 Kyu

SELECT   
 CAST(n^3 AS int) AS res
FROM nums;
SELECT 
  CAST(s.transaction_date as date) as day,
  d.name AS department,
  COUNT(s.id) AS sale_count
FROM department AS d /* esse AS não faz diferença, só torna mais legível */
LEFT JOIN sale AS s 
  ON d.id = s.department_id
GROUP BY 
  day,
  department
ORDER BY day ASC, department ASC, sale_count DESC;
SELECT 
  p.id,
  p.name,
  COUNT(t.name) AS toy_count
FROM people AS p
LEFT JOIN toys AS t
  ON p.id = t.people_id
GROUP BY p.id;
SELECT 
  p.pokemon_name,
  p.str * m.multiplier AS modifiedStrength,
  m.element
FROM pokemon p
JOIN multipliers m
  ON p.element_id = m.id
WHERE modifiedStrength >= 40 
ORDER BY modifiedStrength DESC;
SELECT 
  cbrt(number1)  AS cuberoot, 
  ln(number2) AS logarithm
FROM decimals;
SELECT * FROM students
where tuition_received = false;
SELECT 
  BIT_LENGTH (name) + CHAR_LENGTH(race) 
AS calculation
FROM demographics;
SELECT id, name, 
      POSITION(',' IN characteristics) AS comma
FROM monsters  
ORDER BY comma;
SELECT * FROM books
ORDER BY copies_sold DESC
LIMIT 5;
SELECT * FROM students
  WHERE 
    (quality1 = 'evil' AND quality2 = 'cunning')
    OR
    (quality1 = 'brave' AND quality2 != 'evil')
    OR
    (quality1 = 'studious' OR quality2 = 'intelligent')
    OR
    (quality1 = 'hufflepuff' OR quality2 = 'hufflepuff')
ORDER BY id ASC;
SELECT 
  id,
  ASCII(name) AS name,
  birthday,
  ASCII(race) AS race
FROM demographics;
CREATE TABLE tabela ("Greeting" VARCHAR PRIMARY KEY);
INSERT INTO tabela VALUES ('hello world!');
SELECT * FROM tabela;

8 kyu

SELECT DISTINCT age FROM people;