Maison >base de données >tutoriel mysql >Comment puis-je combiner deux instructions SELECT en une seule requête pour afficher le nombre de tâches et le nombre de tâches en retard ?

Comment puis-je combiner deux instructions SELECT en une seule requête pour afficher le nombre de tâches et le nombre de tâches en retard ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-08 22:46:43573parcourir

How Can I Combine Two SELECT Statements into a Single Query to Show Task Counts and Late Task Counts?

Combinez les résultats de l'instruction SELECT en une seule requête

Lorsque vous travaillez avec des bases de données, il est extrêmement utile de combiner des données provenant de plusieurs sources de données à des fins d'analyse. Cependant, y parvenir présente parfois des défis. Dans cet exemple, nous avons deux instructions SELECT distinctes, chacune récupérant des informations spécifiques de la base de données des tâches.

La première instruction SELECT compte le nombre de tâches assignées à chaque personne :

<code class="language-sql">SELECT ks, COUNT(*) AS '# Tasks'
FROM Table
GROUP BY ks</code>

La deuxième instruction SELECT identifie le nombre de tâches en retard pour chaque personne (tâches dont l'âge dépasse Palt) :

<code class="language-sql">SELECT ks, COUNT(*) AS '# Late'
FROM Table
WHERE Age > Palt
GROUP BY ks</code>

Notre objectif est de combiner les résultats de ces deux requêtes dans un tableau contenant l'identifiant de chaque personne (ks), le nombre total de tâches dont elle dispose (# Tâches) et le nombre de tâches en retard dont elle dispose (# En retard) colonne.

Une façon d'y parvenir est d'utiliser l'opération JOIN. Plus précisément, LEFT JOIN nous permet d'inclure toutes les lignes de la première table (t1) et les lignes correspondantes de la deuxième table (t2) lorsque les clés de jointure (ks) correspondent. S'il n'y a pas de ligne correspondante dans t2, le résultat contiendra des valeurs NULL. Cela garantit que même les personnes sans tâches en retard apparaîtront dans les résultats finaux.

La requête suivante implémente LEFT JOIN :

<code class="language-sql">SELECT t1.ks, t1.[# Tasks], COALESCE(t2.[# Late], 0) AS [# Late]
FROM 
    (SELECT ks, COUNT(*) AS '# Tasks' FROM Table GROUP BY ks) t1
LEFT JOIN
    (SELECT ks, COUNT(*) AS '# Late' FROM Table WHERE Age > Palt GROUP BY ks) t2
ON (t1.ks = t2.ks);</code>

La fonction COALESCE gère les valeurs NULL potentielles dans [# Late], garantissant qu'une valeur 0 est renvoyée. Cela produira le tableau de sortie souhaité :

<code>KS        # Tasks   # Late
person1   7         1
person2   3         1
person3   2         0  </code>

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!

Déclaration:
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