MySQL-Selbstverknüpfung fehlender Daten
P粉464208937
P粉464208937 2024-03-31 10:07:32
0
1
334

Ich möchte einen Self-Join für eine Tabelle durchführen, um die Werte spaltenweise darzustellen. Für jedes Objekt gibt es mehrere Eigenschaften (bis zu einem bekannten Grenzwert), es werden jedoch nicht alle Eigenschaften für alle Objekte gespeichert. Ich habe verschiedene Verknüpfungen ausprobiert, aber es fehlen immer Zeilen und ich möchte Nullwerte.

Starttisch:

Objekt-ID Eigenschaften Wert
1 eins 10
1 b 20
1 c 30
2 eins 15
2 c 25

Mein Ziel (vorausgesetzt, ich weiß, dass die drei möglichen Eigenschaften a,b,c sind) ist

Objekt-ID eins b c
1 10 20 30
2 15 25

P粉464208937
P粉464208937

Antworte allen(1)
P粉563446579

您可以使用以下查询来实现它:

SELECT
    ObjectID,  
    SUM(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a,
    SUM(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b,
    SUM(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c
FROM mytable
GROUP BY ObjectID

说明:

使用 CASE 语句,我们选择 Attribute 的值作为特定值,即“a”、“b”等。因此,对于该特定列,仅选择该特定属性的值。

使用 SUM 我们聚合 Value 字段的值。这样,任何 ObjectID 的多行值都会聚合到一行中。

如果您不愿意使用 SUM 因为您可能有非数字值,您可以按照 @xQbert 的建议使用 MAX ,如下所示:

SELECT
    ObjectID,  
    MAX(CASE WHEN Attribute = 'a' THEN Value ELSE NULL END) AS a,
    MAX(CASE WHEN Attribute = 'b' THEN Value ELSE NULL END) AS b,
    MAX(CASE WHEN Attribute = 'c' THEN Value ELSE NULL END) AS c
FROM mytable
GROUP BY ObjectID
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!