2010-10-07 14 views
30

Ich habe eine SQL-Anweisung, dieSQL Unterabfrage mit COUNT Hilfe

SELECT * FROM eventsTable WHERE columnName='Business' 

Ich möchte hinzufügen, das als Unterabfrage funktioniert ...

COUNT(Business) AS row_count 

Wie kann ich das tun?

Antwort

53

Dies ist wahrscheinlich der einfachste Weg, nicht die schönste aber:

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

Dies funktioniert auch ohne zu haben, Verwenden Sie einen group by

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

+1 Over-Klausel ist * elegant * – gbn

+0

Bitte beachten Sie, dass 'OVER' vom SQL-Standard nicht unterstützt wird und nicht in allen RDBMS verfügbar sein wird (z. B. [MySQL unterstützt es nicht]) (http: //stackoverflow.com/questions/6292679/mysql-using-correct-syntax-for-the-over-clause)). – McSonk

8

Möchten Sie die Anzahl der Zeilen erhalten?

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

kann nicht 'haben where'-Klausel in der Gruppe durch. Verwenden Sie 'Having' – Jim

+6

@Jim - Sie können eine' where' Klausel mit 'group by' verwenden. Sie müssten 'having' verwenden, wenn Sie nach dem Ergebnis eines Aggregats filtern möchten, wenn Sie' group by' verwenden. – codingbadger

0

Unter der Annahme gibt es eine Spalte mit dem Namen Geschäft:

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' 

- Added Raum