Maison > base de données > tutoriel mysql > Comment interroger efficacement plusieurs colonnes de différentes tables en SQL ?

Comment interroger efficacement plusieurs colonnes de différentes tables en SQL ?

DDD
Libérer: 2025-01-21 10:51:10
original
505 Les gens l'ont consulté

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

Optimisation des requêtes SQL multi-tables et multi-colonnes

Récupérer des données de plusieurs tables présente souvent des défis, en particulier lorsqu'il faut agréger les valeurs de différentes colonnes. Un cas de support récent a mis en évidence la difficulté d'un utilisateur à compter avec précision les valeurs sur plusieurs colonnes dans deux tableaux. Leur tentative initiale, utilisant des sous-requêtes imbriquées, a donné des résultats incorrects.

La requête erronée ressemblait à ceci :

<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>
Copier après la connexion

La solution réside dans l’utilisation de l’agrégation conditionnelle au sein d’une seule requête. Cette approche simplifiée calcule plusieurs colonnes en fonction de conditions spécifiées, fournissant ainsi des résultats précis. La requête améliorée est :

<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>
Copier après la connexion

Cette requête révisée récupère efficacement les données nécessaires, éliminant les erreurs associées à la structure d'origine trop complexe. La clé est de consolider les calculs en une seule requête bien structurée à l'aide d'instructions SUM() conditionnelles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal