Innerer Join mit derselben Tabelle unter Verwendung der Filterposition
P粉278379495
P粉278379495 2024-02-03 18:57:36
0
2
495

Danke, dass Sie mir geholfen haben, ich lerne immer noch SQL. Ich habe eine Haupttabelle namens JEDI und versuche, spezifische Informationen zur Verwendung von Inner JOIN- und Where-Bedingungen zu erhalten. Insbesondere möchte ich die Anzahl der JEDIs, die einen bestimmten Planeten zwischen bestimmten Daten besucht haben, und deren Level ermitteln.

Ich möchte dann mit einem Inner JOIN in derselben Tabelle filtern und mir nur die Ergebnisse für JEDIs anzeigen, die mehr als 1 Padawan auf diesem bestimmten Planeten haben. Ich glaube, die zweite Bedingung schreckt mich ab. Ich habe den von mir verwendeten Code und die Beispieldatentabelle eingefügt

Mein Ergebnis sollte nur 2 sein, Meister Obi-Wan ist der Einzige, der die Kriterien erfüllt

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粉278379495
P粉278379495

Antworte allen(2)
P粉878510551

首先,您需要对列进行分组并使用 HAVING COUNT 来计算重复值。

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

注意:仅当每个 jedi_id 具有唯一值 jedi.padawan 时,此功能才有效。此查询适用于这些场景。

但是,您可以通过添加另一个计算唯一 jedi.padawan 的条件来改进查询,以便每个 jedi.jedi_idjedi.padawan 值/code> 不会被包含

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
P粉248602298

您可以使用必须替换此 INNER JOIN jedi ON jedi.jedi_id WHERE COUNT(jedi.padawan)>=2

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage