2011-04-14 4 views

Répondre

13
SELECT COUNT(*) FROM tableName 

compte toutes les lignes de la table,

SELECT COUNT(columnName) FROM tableName 

compte toutes les lignes de la table où columnName est non nul, et

SELECT (DISTINCT COUNT(columnName)) FROM tableName 

compte toutes les lignes de la table où columnName est à la fois non nul et distinct (ie deux ne sont pas identiques)

SELECT DISTINCT(COUNT(columnName)) FROM tableName 

Est la deuxième requête (renvoyant, disons, 42), et la distincte est appliquée après que les lignes sont comptées.

+0

+1 @Philip Kelley: Wow, bonne explication! – blunders

3
SELECT COUNT(*) FROM (SELECT DISTINCT columnName FROM tableName); 
+0

Seule cette requête fonctionne pour Oracle. Merci! – Basilevs

11

Vous devez

SELECT COUNT(DISTINCT columnName) AS Cnt 
FROM tableName; 

La requête dans votre question obtient le COUNT (à savoir un jeu de résultats avec une ligne) puis applique Distinct à ce résultat d'une seule ligne qui n'a évidemment aucun effet.

+0

+1 @Martin: Merci, travaillé et l'explication de la raison pour laquelle l'autre travaillait était super. À votre santé! – blunders

+0

@blunders - Si vous êtes satisfait de la réponse de Martin, n'hésitez pas à fermer la discussion en acceptant sa réponse (cliquez sur la coche). @Martin +1. – JonH

+0

@JonH: Oui, je sais - ce que vous ne savez peut-être pas, c'est que vous devez attendre, sauf une réponse; crois que c'est 10 minutes. – blunders