2010-10-07 9 views
30

que tiene una sentencia SQL que funcionasub consulta SQL con ayuda RECUENTO

SELECT * FROM eventsTable WHERE columnName='Business' 

quiero añadir esto como una sub consulta ...

COUNT(Business) AS row_count 

¿Cómo se hace esto?

Respuesta

53

Esta es probablemente la forma más fácil, no es el más bonito sin embargo:

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

Esto también funciona sin tener que utilice un group by

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

+1 La cláusula Over es * elegante * – gbn

+0

Tenga en cuenta que 'OVER' no es compatible con el estándar SQL, y no estará disponible en todos los RDBMS (por ejemplo, [MySQL no lo admite] (http: //stackoverflow.com/questions/6292679/mysql-using-correct-syntax-for-the-over-clause)). – McSonk

8

¿Desea obtener el número de filas?

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

no puede tener 'WHERE' cláusula GROUP BY. Use 'Having' – Jim

+6

@Jim - Puede usar tener una cláusula' where' con 'group by'. Debería usar 'having' si quisiera filtrar el resultado de un agregado al usar' group by'. – codingbadger

0

Suponiendo que hay una columna de negocios llamado:

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' 

- Se ha añadido el espacio

Cuestiones relacionadas