Heim > Datenbank > MySQL-Tutorial > Wie frage ich effizient mehrere Spalten aus verschiedenen Tabellen in SQL ab?

Wie frage ich effizient mehrere Spalten aus verschiedenen Tabellen in SQL ab?

DDD
Freigeben: 2025-01-21 10:51:10
Original
550 Leute haben es durchsucht

How to Efficiently Query Multiple Columns from Different Tables in SQL?

Optimierung von SQL-Abfragen mit mehreren Tabellen und mehreren Spalten

Das Abrufen von Daten aus mehreren Tabellen stellt oft eine Herausforderung dar, insbesondere wenn Werte aus verschiedenen Spalten aggregiert werden müssen. Ein aktueller Supportfall verdeutlichte die Schwierigkeit eines Benutzers, Werte über mehrere Spalten in zwei Tabellen hinweg genau zu zählen. Ihr erster Versuch, verschachtelte Unterabfragen zu verwenden, führte zu falschen Ergebnissen.

Die fehlerhafte Abfrage sah so aus:

<code class="language-sql">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

Die Lösung liegt in der Verwendung der bedingten Aggregation innerhalb einer einzigen Abfrage. Dieser optimierte Ansatz berechnet mehrere Spalten basierend auf angegebenen Bedingungen und liefert genaue Ergebnisse. Die verbesserte Abfrage lautet:

<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 ruft die erforderlichen Daten effizient ab und beseitigt die Fehler, die mit der ursprünglichen, übermäßig komplexen Struktur verbunden sind. Der Schlüssel liegt in der Konsolidierung der Berechnungen in einer einzigen, gut strukturierten Abfrage mithilfe von bedingten SUM()-Anweisungen.

Das obige ist der detaillierte Inhalt vonWie frage ich effizient mehrere Spalten aus verschiedenen Tabellen in SQL ab?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage