3 votes

obtenir des enregistrements d'un seul et unique type

J'ai passé plusieurs heures à essayer de résoudre un problème spécifique, mais je n'y suis pas parvenu. Finalement, j'ai décidé de le poster ici. Voici quelques enregistrements,

 AUTOID  PERSONNAME  FLOWER   Other columns... 

      1  Alex        Rose                      
      2  Rene        Rose                      
      3  Rene        Jasmin                    
      4  Darwin      Rose                      
      5  Alex        Rose                      
      6  Darwin      Jasmin                    
      7  Alex        Rose                      
      8  Rene        Jasmin                    
      9  Hello       World                     
     10  Hello       World                     

Comment puis-je obtenir ce résultat ? la personne qui n'a qu'un seul type de fleur sur tous ses dossiers .

 PERSONNAME  FLOWERNAME 

 Alex        Rose       
 Hello       World      

la meilleure solution que j'ai essayée est la requête ci-dessous, mais elle ne fonctionne toujours pas.

SELECT  DISTINCT t1.PersonName, t1.Flower
FROM    TableName t1 
        INNER JOIN
        (
            SELECT  personname, COUNT(DISTINCT flower) totals
            FROM    tableName
            GROUP   BY personname, Flower
        )  t2 ON t1.personname = t2.personname and
                    t2.totals = 1

Une idée ?

4voto

John Woo Points 132738

Vous pouvez utiliser GROUP BY clause, HAVING et COUNT() sur ce problème, il n'est pas nécessaire d'effectuer une jointure sur une sous-requête

SELECT  PersonName, MAX(Flower) flowerName
FROM    TableName
GROUP   BY PersonName
HAVING  COUNT(DISTINCT Flower) = 1

0voto

Strawberry Points 9887

Ou, parce qu'il y a toujours plus d'une façon d'écorcher un chat...

SELECT x.*
  FROM tablename x
  LEFT
  JOIN tablename y
    ON y.personname = x.personname
   AND ((y.flower <> x.flower)
    OR  (y.flower = x.flower AND y.autoid < x.autoid))
 WHERE y.autoid IS NULL;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X