0
votes

Vérifiez si tous les enregistrements ont la même valeur dans un champ?

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

0 commentaires

7 Réponses :


1
votes
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;

0 commentaires

0
votes

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: xxx pré>

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 


0 commentaires

0
votes
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

0 commentaires

0
votes

Vous pouvez également utiliser une agrégation conditionnelle comme xxx


0 commentaires

1
votes

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;


0 commentaires

1
votes

sans Count (*) , à l'aide de n'existe pas : xxx

ceci retournera 1 Si toutes les lignes avec job_id = 31 ont Status = 2 , sinon il retournera 0 .


0 commentaires

0
votes

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


0 commentaires