2010-10-07 12 views
30

Mam instrukcję SQL, która działapodzapytanie SQL z hrabią pomoc

SELECT * FROM eventsTable WHERE columnName='Business' 

chcę dodać to jako podzapytania ...

COUNT(Business) AS row_count 

jaki sposób mogę to zrobić?

Odpowiedz

53

Jest to chyba najprostszy sposób, nie najładniejszy choć:

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

ta będzie również pracować bez konieczności używać group by

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

+1 Klauzula over jest * elegancki * – gbn

+0

Należy pamiętać, że 'OVER' nie jest obsługiwany przez standard SQL i nie będzie dostępny dla wszystkich RDBMS (na przykład [MySQL go nie obsługuje] (http: //stackoverflow.com/questions/6292679/mysql-using-correct-syntax-for-over-over-clause)). – McSonk

8

Chcesz uzyskać liczbę wierszy?

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

Nie można mieć 'where' klauzula grupy przez. Użyj 'Posiadanie' – Jim

+6

@Jim - Możesz użyć klauzuli' where' z 'group by'. Będziesz musiał użyć 'mającego', jeśli chcesz filtrować wynik agregatu podczas używania 'group by'. – codingbadger

0

Zakładając, że jest to kolumna o nazwie biznesu:

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' 

- Dodano przestrzeń

Powiązane problemy