Quero o maior número único possível da tabela. Há duplicatas na tabela, então quero que o resultado final reflita nulo porque não há um único número maior.
Eu tentei todas as modificações possíveis na minha consulta para que meu código retornasse valores nulos, mas não retorna. Esse é um problema do leetcode que eu estava tentando resolver e tentando construir um entendimento muito mais profundo do problema na minha consulta SQL.
Só precisava saber como posso introduzir valores NULL manualmente. Eu sei a resposta de codificação real para a pergunta, e é por isso que preciso de uma boa explicação do que estou fazendo errado, junto com modificações neste código.
Obrigado por toda a ajuda que vocês fornecem.
Entrada:
num |
---|
8 |
8 |
7 |
7 |
3 |
3 |
Saída:
num |
---|
Esperado:
num |
---|
nulo |
Aqui está o código:
/* Write your T-SQL query statement below */
WITH CTE AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY num ORDER BY num) AS RN
FROM MyNumbers
),
CTE2 AS
(
SELECT TOP 1 num
FROM CTE
WHERE num NOT IN (SELECT num FROM CTE WHERE RN >= 2)
ORDER BY num DESC
)
SELECT
(CASE
WHEN num IS NULL OR num = ''
THEN NULL
ELSE num
END) AS num FROM CTE2;
Isso pode ser consideravelmente mais simples resumindo sua tabela e então selecionando o valor máximo dela:
Com sua abordagem, usando row_number()
Se CTE2 não retornar linhas, max(...) retornará nulo.
Veja o exemplo com tabela vazia
violino
Se em qualquer caso, CTE2 retornar linhas ou não, você deve calcular max(num).
Próximo exemplo:
Você pode usar count(*)over(...) e filtrar linhas com count=1
É possível simplificar, movendo o filtro (WHERE) para a consulta principal
Ou
Último:
contar e filtrar linhas diretamente pela cláusula HAVING
Violino