2010-10-07 36 views
30

Tôi có một câu lệnh SQL mà làm việcSQL subquery với COUNT giúp đỡ

SELECT * FROM eventsTable WHERE columnName='Business' 

Tôi muốn thêm này như một subquery ...

COUNT(Business) AS row_count 

Làm thế nào để làm điều này?

Trả lời

53

Đây có lẽ là cách đơn giản nhất, không phải là đẹp nhất mặc dù:

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

này cũng sẽ làm việc mà không cần phải sử dụng một số group by

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

Khoản +1 trên * thanh lịch * – gbn

+0

Xin lưu ý rằng 'OVER' không được hỗ trợ bởi tiêu chuẩn SQL, và nó sẽ không có sẵn trên tất cả các RDBMS (Ví dụ, [MySQL không hỗ trợ nó] (http: //stackoverflow.com/questions/6292679/mysql-using-correct-syntax-for-the-over-clause)). – McSonk

8

Bạn có muốn nhận số hàng không?

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

Không thể có mệnh đề 'where' trong nhóm theo. Sử dụng 'Have' – Jim

+6

@Jim - Bạn có thể sử dụng mệnh đề' where' với 'group by'. Bạn sẽ cần phải sử dụng 'have' nếu bạn muốn lọc kết quả của một tổng hợp khi sử dụng' nhóm bởi'. – codingbadger

0

Giả sử có một cột tên kinh doanh:

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' 

- Không gian được thêm

Các vấn đề liên quan