recherche

Maison  >  Questions et réponses  >  le corps du texte

Jointure interne à la même table en utilisant la position du filtre

Merci de m'avoir aidé, j'apprends encore SQL. J'ai une table principale appelée JEDI et j'essaie d'obtenir des informations spécifiques sur l'utilisation des conditions Inner JOIN et Where. Plus précisément, je souhaite obtenir le nombre de JEDI qui ont visité une planète spécifique entre des dates spécifiques et leur niveau.

Je souhaite ensuite filtrer en utilisant un Inner JOIN sur la même table et me montrer uniquement les résultats pour les JEDI qui ont plus d'un padawan sur cette planète particulière. Je pense que la deuxième condition me déstabilise. J'ai collé le code que j'ai utilisé et l'exemple de tableau de données

Mon résultat devrait juste être 2, Maître Obi-Wan est le seul à répondre aux critères

SELECT COUNT(jedi.jedi_id),jedi.rank_id
FROM jedi
WHERE jedi.date >='2022-01-01' AND jedi.date <='2022-06-31' AND jedi.planet='Tatoine'
INNER JOIN jedi ON jedi.jedi_id WHERE COUNT(jedi.padawan)>=2
GROUP BY jedi.rank_id
P粉278379495P粉278379495338 Il y a quelques jours511

répondre à tous(2)je répondrai

  • P粉878510551

    P粉8785105512024-02-04 16:59:14

    Tout d'abord, vous devez regrouper les colonnes et utiliser HAVING COUNT pour compter les valeurs en double.

    SELECT COUNT(jedi.jedi_id),jedi.rank_id
    FROM jedi
    WHERE jedi.date BETWEEN '2022-01-01' AND '2022-06-31' 
                                         AND jedi.planet='Tatoine'
    GROUP BY jedi.jedi_id, jedi.rank_id
    HAVING COUNT(jedi.jedi_id) > 1

    Remarque : Cette fonctionnalité ne fonctionne que pour chaque jedi_id 具有唯一值 jedi.padawan. Cette requête convient à ces scénarios.

    Cependant, vous pouvez calculer une jedi.padawan 的条件来改进查询,以便每个 jedi.jedi_id< 上重复出现 jedi.padawan valeur/code> unique en en ajoutant une autre qui ne sera pas incluse

    SELECT COUNT(jedi.jedi_id),jedi.rank_id
    FROM jedi
    WHERE jedi.date BETWEEN '2022-01-01' AND '2022-06-31' 
                                         AND jedi.planet='Tatoine'
    GROUP BY jedi.jedi_id, jedi.rank_id
    HAVING COUNT(jedi.jedi_id) > 1 AND
           COUNT (DISTINCT jedi.padawan) > 1

    répondre
    0
  • P粉248602298

    P粉2486022982024-02-04 14:18:54

    Vous pouvez remplacer ceci par must INNER JOIN jedi ON jedi.jedi_id WHERE COUNT(jedi.padawan)>=2

    répondre
    0
  • Annulerrépondre