2010-10-16 11 views
3

Je sais que la requête ci-dessous n'est pas valide, mais je l'utilise simplement comme un exemple de ce que j'essaie de réaliser.Faire plusieurs comptes MySQL dans une requête?

En fait ce que je veux faire est d'obtenir un COUNT () de toutes les lignes & puis aussi obtenir un COUNT () de lignes avec une clause de condition dans une requête.

Tels que ..

SELECT 
    COUNT(*) AS full_amount, 
    COUNT(address IF NOT NULL), 
    COUNT(name IF NOT NULL) 
FROM 
    table; 

Maintenant, ce que je suis en train de découvrir ci-dessus est le décompte complet de la table & J'essaie aussi de trouver un nombre des lignes de la table où le champ 'adresse' & 'nom' n'est PAS NULL. Pas où ils ne sont pas tous les deux null, mais individuellement.

Pour expliquer plus loin, voici comment cela serait fait avec plusieurs requêtes, que je suis en train d'éviter ..

SELECT COUNT(*) FROM table AS amount; 

SELECT COUNT(*) FROM table AS amount WHERE address IS NOT NULL; 

SELECT COUNT(*) FROM table AS amount WHERE name IS NOT NULL; 

Y at-il de meilleures façons de le faire que d'exécuter plusieurs requêtes?

Répondre

4

Vous y êtes presque - COUNT compte le nombre de lignes où le paramètre est non NULL:

SELECT COUNT(*) AS full_amount, 
    COUNT(address) AS has_address, 
    COUNT(name) AS has_name 
FROM table; 

Voir aussi COUNT(DISTINCT ...) de compter le nombre de différentes valeurs non NULL.

+0

+1: me battra ~ 48 secondes –

+0

Merci beaucoup Simon. :) – Brett

0

Vous pouvez le faire en utilisant cette astuce:

SELECT COUNT(*), 
    SUM(IFNULL(address, 0, 1)) AS address_count, 
    SUM(IFNULL(name, 0, 1)) as name_count 
FROM Table; 
Questions connexes