Suponha estes dados:
id firstname surname val1 val2 val3
1 joe blogs 1 (null) (null)
2 jane doe (null) 2 5
3 bobby tables (null) (null) (null)
Eu gostaria de uma consulta que retornasse:
id count_non_null_vals
1 1
2 2
3 0
COUNT
e SUM
obviamente não funciona (se funcionarem, eduque-me!), e embora tenhamos GREATEST
e LEAST
como semelhanças em linha para MAX
/ MIN
, não consigo encontrar algo análogo a COUNT
.
Eu posso fazer um gigante horrível de IF
s aninhados etc, mas no meu exemplo de legado do mundo real há 30 dessas colunas, então eu prefiro poder fazer COL_COUNT(val1, val2, val3...
etc
Obrigada!
Direto da documentação do MySQL
Basta usar a função COUNT() em cada coluna e adicioná-las por último
Você pode usar seu PHP/Python/Java para criar o SQL, pois possui 30 colunas.
ATUALIZAÇÃO 2021-09-20 11:45 EDT
Eu decidi realmente escrever isso de verdade. Aqui está o que eu fiz:
MINHA PROPOSTA DE PERGUNTA
SEUS DADOS DE AMOSTRA
SEUS DADOS DE AMOSTRA CARREGADOS
SUA MESA
MINHA PROPOSTA DE CONSULTA EXECUTA
GRANDE AVISO
Eu tive que definir o sql_mode da sessão para em branco porque o MySQL não gosta de fazer consultas agregadas dessa natureza. Reclama de um GROUP BY invalidado caso contrário.
ATUALIZAÇÃO 2021-09-20 12:03 EDT
Para quem está executando 5.7/8.0, você pode desabilitar o sql_mode na sessão, executar a consulta e redefini-la novamente....