Dovresti essere in grado di applicare una funzione di aggregazione a tutte le colonne e quindi GROUP BY id
:
select id,
max(name) name,
max(age) age,
max(grade) grade
from yourtable
group by id
Vedi SQL Fiddle con demo
Per quanto riguarda la struttura del DB, l'unico problema che vedo è che stai inserendo più record per lo stesso utente. Dovresti usare un UPDATE
istruzione per utilizzare i valori invece di inserirli.
Sembra che tu voglia usare REPLACE
funzione in MySQL (ecco un tutorial
).
Quindi la query sarebbe simile a questa:
REPLACE
INTO yourtable (`id`, `name`, `age`, `grade`)
VALUES (0, 'john', 11, null);
Vedi SQL Fiddle con demo