Você deve ser capaz de aplicar uma função agregada a todas as colunas e então
GROUP BY id
:select id,
max(name) name,
max(age) age,
max(grade) grade
from yourtable
group by id
Consulte SQL Fiddle with Demo
Quanto à estrutura do banco de dados, o único problema que vejo é que você está inserindo vários registros para o mesmo usuário. Você deve estar usando um
UPDATE
instrução para usar os valores em vez de inserir. Parece que você quer usar o
REPLACE
função no MySQL (aqui está um tutorial
). Então a consulta seria semelhante a esta:
REPLACE
INTO yourtable (`id`, `name`, `age`, `grade`)
VALUES (0, 'john', 11, null);
Consulte SQL Fiddle with Demo