Je suis nouveau dans SQL, j'ai une question de base. J'ai 3 tables et 2 jointures intérieures.
Ceci est mon code SQL: erreur: doit apparaître dans le groupe par clause ou être utilisé dans une fonction d'agrégat code> p> p> p> p>
4 Réponses :
Tout champ que vous souhaitez extraire doit être contenu dans le groupe par code> de cette requête. Vous devriez inclure "temps" dans le groupe par code> clause ou l'exclure de la requête. select c.name, case when e.time > NOW() then 'Yes' else 'No' end AS "time"
from table1 as e
INNER JOIN table2 as a on e.id = a.id
INNER JOIN table3 as c on a.id = c.id
where e.name = 'JOHN'
GROUP BY c.name, time;
Utilisez l'attribut E.Time dans le groupe par clause.
select c.name, case when e.time > NOW() then 'Yes' else 'No' end AS "time" from table1 as e INNER JOIN table2 as a on e.id = a.id INNER JOIN table3 as c on a.id = c.id where e.name = 'JOHN' GROUP BY c.name, e.time;
Je suppose que vous voulez que vous souhaitiez agrégation - et le temps maximum:
Vous n'avez pas besoin de groupe par nom code> puisque vous sélectionnez uniquement les lignes avec nom = 'John' code>. de
Si vous souhaitez sélectionner la ligne avec l'heure maximale code>, faites ceci: select
'JOHN' name,
case when max(e.time) > NOW() then 'Yes' else 'No' end AS "time"
from table1 as e
INNER JOIN table2 as a on e.id = a.id
INNER JOIN table3 as c on a.id = c.id
where e.name = 'JOHN'
Votre expression code> code> n'a aucun sens ici, car elle fait référence à des enregistrements individuels, lorsque votre
groupe par code> signifie que Postgres doit signaler en termes de groupes i> de enregistrements. Veuillez ajouter des exemples de données.Pourquoi ne pas supprimer le groupe
par code>, je ne vois aucune utilisation pour cela? Voulez-vous utilisercommander par code>?Je veux énumérer un seul pour un seul nom.
Lequel? Celui avec le temps minimum ou maximum, ou autre chose?
Sonne comme un autre Meest-N-Per-Group Question