2011-10-22 8 views
31

Tôi có bảng này:mysql nhóm đếm bằng cách

Movies (ID, Genre) 

Một phim có thể có nhiều thể loại, vì vậy một ID không phải là cụ thể cho một thể loại, nó là một nhiều mối quan hệ. Tôi muốn có một truy vấn để tìm tổng số phim có chính xác 4 thể loại. Truy vấn hiện tại tôi có là

SELECT COUNT(*) 
    FROM Movies 
GROUP BY ID 
    HAVING COUNT(Genre) = 4 

Tuy nhiên, điều này trả về cho tôi danh sách 4 thay vì tổng số tiền. Làm cách nào để nhận tổng số tiền thay vì danh sách count(*)?

Trả lời

61

Một cách sẽ được sử dụng một truy vấn lồng nhau:

SELECT count(*) 
FROM (
    SELECT COUNT(Genre) AS count 
    FROM movies 
    GROUP BY ID 
    HAVING (count = 4) 
) AS x 

Truy vấn bên trong được tất cả những bộ phim có chính xác 4 thể loại, sau đó bên ngoài truy vấn đếm số lượng hàng mà truy vấn bên trong trả về.

2

lẽ

SELECT count(*) FROM (
    SELECT COUNT(*) FROM Movies GROUP BY ID HAVING count(Genre) = 4 
) AS the_count_total 

mặc dù điều đó sẽ không phải là tổng của tất cả các phim, chỉ cần bao nhiêu có 4 thể loại của.

Vì vậy, có thể bạn muốn

SELECT sum(
    SELECT COUNT(*) FROM Movies GROUP BY ID having Count(Genre) = 4 
) as the_sum_total 
+0

Tôi khá chắc chắn rằng sẽ không làm việc –

+0

thế nào về phiên bản thứ 2? –

+0

tôi cũng cập nhật –

6
SELECT COUNT(*) 
FROM (SELECT COUNT(*) 
     FROM movies 
     GROUP BY id 
     HAVING COUNT(genre) = 4) t 
1

gì về:

SELECT COUNT(*) FROM (SELECT ID FROM Movies GROUP BY ID HAVING COUNT(Genre)=4) a