2013-06-19 30 views
17

Trong thường sử dụng trong TSQL các truy vấn sau đây:Làm thế nào để chọn tất cả các cột, và một count (*) trong cùng một truy vấn

SELECT COUNT(*), * 
FROM CUSTOMER c 
WHERE c.Name like 'foo%'; 

Khi tôi cố gắng để thực hiện truy vấn này trong Oracle SQL Developer nó không làm việc và ném cho tôi một lỗi:

"Missing expression"

Cú pháp tốt là gì?

Xin cảm ơn trước.

+0

bạn sẽ phải sử dụng nhóm bởi .. hoặc kết hợp các kết quả của hai truy vấn. –

+1

Plz cung cấp lược đồ Bảng của bạn .. –

+0

Tôi không tin rằng câu lệnh đó hoạt động trong SQL Server –

Trả lời

4

Một cách tiếp cận là làm một việc như sau. Điều này sẽ dẫn đến kết quả đếm (*) cho mỗi dòng. Nhưng hãy cẩn thận, có một Cartesianjoin; nếu bạn có nhiều hàng như 'foo%' thì điều này sẽ hoạt động kém.

select a.cntr, c.* 
from CUSTOMER c 
    , (select count(*) cntr 
    from customer b 
    where b.name like 'foo%') a 
where c.name like 'foo%' 
34

này sẽ thực hiện tốt:

SELECT COUNT(*) OVER(), c.* 
FROM CUSTOMER c 
WHERE c.Name like 'foo%'; 
+7

giải thích sẽ có được tốt đẹp – Blauhirn

+2

@Blauhim, đó là một chức năng phân tích với một mệnh đề cửa sổ trống - vì vậy nó tính toán số lượng hàng trên toàn bộ kết quả. Nó thường sẽ hoạt động tốt hơn vì nó chỉ nên truy cập vào từng khối của bảng một lần, đếm các hàng khi nó đi. –

+0

@Jeffrey Điều này là tốt đẹp, nhưng các cột bổ sung cho mỗi hàng nó tạo ra có xu hướng gây ra chi phí cao hơn một số lựa chọn (*), đặc biệt là nếu bạn có một tổng hợp cho mỗi cột. Có thể có tổng số này giống như hàng đầu tiên và không lặp lại một lần nữa cho mỗi hàng không? – user3758745

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