Heim > Datenbank > MySQL-Tutorial > Wie kann ich Daten mit eindeutigen Datensätzen genau zentrieren, um den Verlust von Informationen zu vermeiden?

Wie kann ich Daten mit eindeutigen Datensätzen genau zentrieren, um den Verlust von Informationen zu vermeiden?

Barbara Streisand
Freigeben: 2024-12-30 13:01:12
Original
459 Leute haben es durchsucht

How Can I Accurately Pivot Data with Distinct Records to Avoid Losing Information?

Eindeutige Datensätze effektiv pivotieren

Pivot-Abfragen spielen eine entscheidende Rolle bei der Umwandlung von Daten in ein Tabellenformat und ermöglichen eine einfache Datenanalyse. Beim Umgang mit unterschiedlichen Datensätzen kann das Standardverhalten von Pivot-Abfragen jedoch problematisch werden.

Problem: Unterschiedliche Werte ignorieren

Beachten Sie die folgende Tabelle:

------------------------------------------------------
| Id    Code  percentage  name  name1   activity     |
-----------------------------------------------------
| 1   Prashant  43.43    James  James_  Running      |
| 1   Prashant  70.43    Sam    Sam_    Cooking      |
| 1   Prashant  90.34    Lisa   Lisa_   Walking      |
| 1   Prashant  0.00     James  James_  Stealing     |
| 1   Prashant  0.00     James  James_  Lacking      |
| 1   Prashant  73       Sam     Sam_   Cooking 1    |
------------------------------------------------------
Nach dem Login kopieren

Eine herkömmliche Pivot-Abfrage wie:

SELECT Id,Code,
    MAX(CASE WHEN name = 'James' THEN activity END) AS James,
    MAX(CASE WHEN name1 = 'James_' THEN percentage END) AS James_,
    MAX(CASE WHEN name = 'Sam' THEN activity END) AS Sam,
    MAX(CASE WHEN name1 = 'Sam_' THEN percentage END) AS Sam_,
    MAX(CASE WHEN name = 'Lisa' THEN activity END) AS Lisa,
    MAX(CASE WHEN name1 = 'Lisa_' THEN percentage END) AS Lisa_
FROM A
GROUP BY Id, Code
Nach dem Login kopieren

würde Folgendes ergeben Tabelle:

-------------------------------------------------------------------
Id  Code        James    James_  Sam        Sam_    Lisa      Lisa_
-------------------------------------------------------------------
1   Prashant    Running  43.43  Cooking     3.43    Walking   90.34
1   Prashant    Stealing 0.0    NULL        NULL    NULL      NULL
-------------------------------------------------------------------
Nach dem Login kopieren

Das Problem hierbei ist, dass die Pivot-Abfrage eindeutige Werte für Name1 ignoriert, wenn Name wiederholt wird und der Prozentsatz 0 ist. In diesem Fall geht die Aktivität „Fehlend“ für James verloren.

Lösung: Verwendung von ROW_NUMBER() für Genauigkeit

Um dieses Problem zu beheben, können wir Folgendes vorstellen: ROW_NUMBER():

;with cte as 
(
    select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM
    from A
)
...
Nach dem Login kopieren

Durch die Verwendung von ROW_NUMBER() partitionieren wir die Daten basierend auf dem Namen und weisen jeder Zeile eine eindeutige Nummer innerhalb dieser Partition zu. Dadurch können wir den Zusammenhang zwischen Aktivitäten und Prozentsätzen beibehalten, auch wenn der Name wiederholt wird.

Die resultierende Tabelle sieht wie folgt aus:

----------------------------------------------------------
| Id  Code        James       James_  Sam         Sam_    Lisa    Lisa_
----------------------------------------------------------
| 1   Prashant    Running     43.43   Cooking 1   73      Walking 90.34
| 1   Prashant    Stealing    0.00    Cooking     3.43    NULL    NULL
| 1   Prashant    Lacking     0.00    NULL        NULL    NULL    NULL
----------------------------------------------------------
Nach dem Login kopieren

Alle Aktivitäten, einschließlich „Fehlend“ für James werden nun in der Pivot-Tabelle dargestellt. Diese Technik stellt sicher, dass eindeutige Werte erhalten bleiben und genaue Daten für die Analyse bereitgestellt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Daten mit eindeutigen Datensätzen genau zentrieren, um den Verlust von Informationen zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage