select count(*) from step where job_id =31 ; select count(*) from step where job_id =31 and status =2; These are two queries. I want to know if count1 and count2 are equal in a single query
7 Réponses :
select count(*) as jobCount,
sum(status = 2) as statusCount,
count(*) - sum(status = 2) as countDifference,
(count(*) - sum(status = 2)) = 0 as isEqual
from step
where job_id = 31;
Si vous n'avez besoin que de savoir si son égal sans connaître la valeur du compte, vérifiez que l'existence d'état différente de 2 est plus logique: Si vous avez besoin de la valeur: P > select count(*), sum(case when status = 2 then 1 else 0 end)
from step where jod_id = 31
SELECT CASE WHEN (COUNT(*) - sum(CASE WHEN status = 2 THEN 1 ELSE 0 END)) > 0 THEN 'Not Equal' ELSE 'Equal' END FROM step WHERE job_id = 31
Vous pouvez également utiliser une agrégation conditionnelle comme
Assumer Statut code> n'est pas null code>, pourquoi pas seulement compter celles qui ne sont pas "2"? select ( sum(not status <=> 2) = 0 ) as all_are_2
from step
where job_id = 31;
sans ceci retournera Count (*) code>, à l'aide de n'existe pas code>: 1 code> Si toutes les lignes avec job_id = 31 code> ont Status = 2 code>, sinon il retournera 0 code>. p> p>
Si tout ce que vous êtes intéressé à savoir qu'il existe certaines lignes qui ont job_id code> valeur 31, mais statut code> non égal à 2, vous pouvez bénéficier de Limite 1 Code> Clause. Il sera plus performant que d'utiliser compter (..) code>; comme limite 1 code> arrêtera d'exécuter à la première ligne correspondante. SELECT 1 AS Row_Having_Status_NotEqual_2
FROM step
WHERE job_id = 31
AND status <> 2
LIMIT 1