Heim > Datenbank > MySQL-Tutorial > Wie können Daten aus mehreren Spalten in verschiedenen Tabellen in MySQL effizient aggregiert werden?

Wie können Daten aus mehreren Spalten in verschiedenen Tabellen in MySQL effizient aggregiert werden?

Barbara Streisand
Freigeben: 2025-01-21 10:56:10
Original
595 Leute haben es durchsucht

How to Efficiently Aggregate Data from Multiple Columns Across Different Tables in MySQL?

Effizientes Zusammenfassen von Daten aus mehreren Spalten in MySQL

Bei der Arbeit mit relationalen Datenbanken müssen häufig Daten aggregiert werden, die über mehrere Spalten in verschiedenen Tabellen verteilt sind. Die einfache Verkettung mehrerer Abfragen kann zu ungenauen Ergebnissen führen. Dieses Beispiel zeigt ein häufiges Problem und seine effiziente Lösung mit MySQL.

Betrachten Sie diese erste MySQL-Abfrage, die dazu dient, Patientendaten aus der t_hospital-Tabelle zusammenzufassen:

<code class="language-sql">SET @start_res = 20150301;
SET @finish_res= 20150501;
SET @finish_check= 20150801;
SET @start_check= 20150301;
SET @daily_hos= 3;

SELECT* from
   ( SELECT COUNT(DAY_IN) AS arr FROM t_hospital WHERE DAY_IN between  @start_check and @finish_check and RES_DATE between @start_res and @finish_res  and ID_daily_hos =@daily_hos group by DAY_IN  )e,
     (SELECT COUNT(PAT_STATUS) AS ONG1 FROM t_hospital WHERE PAT_STATUS  like '%ong%' and  DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res  and ID_daily_hos =@daily_hos group by DAY_IN ) a,
        (SELECT COUNT(PAT_STATUS) AS RTED FROM t_hospital WHERE PAT_STATUS  like '%rtde%'and  DAY_IN between  @start_check and @finish_check and RES_DATE between @start_res and @finish_res  and ID_daily_hos =@daily_hos group by DAY_IN  )b,
           (SELECT COUNT(PAT_STATUS) AS POLI FROM t_hospital WHERE PAT_STATUS  like '%pol%'and DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res  and ID_daily_hos =@daily_hos group by DAY_IN   )c,
              (SELECT COUNT(PAT_STATUS) AS para FROM t_hospital WHERE PAT_STATUS  like '%para%' and  DAY_IN between @start_check and @finish_check and RES_DATE between @start_res and @finish_res  and ID_daily_hos =@daily_hos group by DAY_IN  )d;</code>
Nach dem Login kopieren

Das Problem: Nur arr (Zählen DAY_IN) liefert korrekte Ergebnisse. ONG1, RTED, POLI und para (Zählen des Vorkommens verschiedener PAT_STATUS-Werte) sind aufgrund der falschen Verknüpfung separater Abfragen ungenau.

Die Lösung: Die Verwendung der Aggregatfunktionen von MySQL (SUM und IF) innerhalb einer einzigen Abfrage bietet eine viel effizientere und genauere Lösung:

<code class="language-sql">SELECT DAY_IN, COUNT(*) AS arr,
        SUM(IF(PAT_STATUS  like '%ong%', 1, 0)) AS ONG1,
        SUM(IF(PAT_STATUS  like '%rtde%', 1, 0)) AS RTED,
        SUM(IF(PAT_STATUS  like '%pol%', 1, 0)) AS POL1,
        SUM(IF(PAT_STATUS  like '%para%', 1, 0)) AS para
FROM t_hospital 
WHERE DAY_IN between @start_check and @finish_check 
    and RES_DATE between @start_res and @finish_res  
    and ID_daily_hos =@daily_hos
GROUP BY DAY_IN;</code>
Nach dem Login kopieren

Diese überarbeitete Abfrage aggregiert die Daten für jede DAY_IN korrekt und liefert genaue Zählungen für jede PAT_STATUS-Kategorie in einer einzigen, effizienten Abfrage. Dieser Ansatz vermeidet das kartesische Produkt und die daraus resultierenden Ungenauigkeiten der ursprünglichen Abfrage.

Das obige ist der detaillierte Inhalt vonWie können Daten aus mehreren Spalten in verschiedenen Tabellen in MySQL effizient aggregiert werden?. 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