Scusa l'insistenza, questo che vol dire?
In tutti i linguaggi di programmazione (associamoci anche sql), ci sono parole che vengono interpretate con significati diversi,
esempio semplice, abbiamo una colonna di una tabella sql che contiene una descrizione, per nostro gusto, la nominiamo DESC
ora scriviamo una select con un ORDER BY DESC,
ovvero chiediamo di ordinare in modo discendente, che cosa ? manca il nome della colonna
cioé il nome DESC non va usato per nominare una colonna
nel tuo caso WHEN viene usato nel costrutto CASE esempio,
CASE WHEN '07:00:00' between ora_ingresso and ora_uscita THEN 1 ELSE 0 END ) AS presenza
anche in questo caso, il nome WHEN non va usato per nominare una colonna (come anche CASE)
per tentare di risolvere, prova ad usare un alias, ovvero prova a scrivere
SELECT ...., WHEN AS newname, ......
GROUP BY newname
ma non sono sicuro che funzioni, se non dovesse funzionare, sei costretto a cambiare il nome della colonna
(cosa che io farei senza aspettare, salvo la curiosità dell'alias)
DESC, WHEN ed altre sono parole "riservate" che impediscono al sistema di interpretarle in modo corretto se usate ... liberamente
spero di essere stato meno ermetico