0
votes

Comment groupe avec deux rejoindre interne dans PostgreSQL

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: xxx

erreur: doit apparaître dans le groupe par clause ou être utilisé dans une fonction d'agrégat


5 commentaires

Votre expression n'a aucun sens ici, car elle fait référence à des enregistrements individuels, lorsque votre groupe par signifie que Postgres doit signaler en termes de groupes de enregistrements. Veuillez ajouter des exemples de données.


Pourquoi ne pas supprimer le groupe par , je ne vois aucune utilisation pour cela? Voulez-vous utiliser commander par ?


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


4 Réponses :


0
votes

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;


0 commentaires

0
votes

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;


0 commentaires

0
votes

Je suppose que vous voulez que vous souhaitiez agrégation - et le temps maximum: xxx


0 commentaires

0
votes

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' 


0 commentaires