2010-10-07 4 views
30

J'ai une instruction SQL qui fonctionneSQL avec sous-requête COUNT aide

SELECT * FROM eventsTable WHERE columnName='Business' 

Je veux ajouter cela comme une sous-requête ...

COUNT(Business) AS row_count 

Comment puis-je cela?

Répondre

53

Ceci est probablement la meilleure façon, pas la plus jolie que:

SELECT *, 
    (SELECT Count(*) FROM eventsTable WHERE columnName = 'Business') as RowCount 
    FROM eventsTable 
    WHERE columnName = 'Business' 

Cela permettra également de travailler sans avoir à utiliser un group by

SELECT *, COUNT(*) OVER() as RowCount 
    FROM eventsTables 
    WHERE columnName = 'Business' 
+8

+1 La clause over est * élégante * – gbn

+0

Veuillez noter que 'OVER' n'est pas supporté par le standard SQL, et il ne sera pas disponible sur tous les SGBDR (par exemple, [MySQL ne le supporte pas] (http: //stackoverflow.com/questions/6292679/mysql-using-correct-syntax-for-the-over-clause)). – McSonk

8

Voulez-vous obtenir le nombre de lignes?

SELECT columnName, COUNT(*) AS row_count 
FROM eventsTable 
WHERE columnName = 'Business' 
GROUP BY columnName 
+0

ne peut pas avoir 'WHERE' clause dans le groupe par. Utilisez 'Having' – Jim

+6

@Jim - Vous pouvez utiliser une clause' where' avec 'group by'. Vous auriez besoin d'utiliser 'having 'si vous vouliez filtrer le résultat d'un agrégat en utilisant' group by'. – codingbadger

0

Si l'on suppose il y a une colonne entreprise nommée:

SELECT Business, COUNT(*) FROM eventsTable GROUP BY Business

5
SELECT e.*, 
     cnt.colCount 
FROM eventsTable e 
INNER JOIN (
      select columnName,count(columnName) as colCount 
      from eventsTable e2 
      group by columnName 
      ) as cnt on cnt.columnName = e.columnName 
WHERE e.columnName='Business' 

- Espace Ajouté