2008-11-19 44 views
118

tôi đang cố gắng để thực hiện những điều sau đây trong MySQL (xem pseudo đang)MySQL - Sử dụng COUNT (*) trong mệnh đề WHERE

SELECT DISTINCT gid 
FROM `gd` 
WHERE COUNT(*) > 10 
ORDER BY lastupdated DESC 

Có cách nào để làm điều này mà không cần sử dụng một (SELECT ...) trong mệnh đề WHERE vì điều đó có vẻ như lãng phí tài nguyên.

Tất cả trợ giúp đều được đánh giá cao.

Cảm ơn bạn!

Trả lời

11
SELECT COUNT(*) 
FROM `gd` 
GROUP BY gid 
HAVING COUNT(gid) > 10 
ORDER BY lastupdated DESC; 

EDIT (nếu bạn chỉ muốn gids):

SELECT MIN(gid) 
FROM `gd` 
GROUP BY gid 
HAVING COUNT(gid) > 10 
ORDER BY lastupdated DESC 
+0

Cảm ơn Joe nhưng đó trả về COUNT() - Tôi đang tìm kiếm để trả lại tất cả của gid trong đó có một COUNT (*) nhiều hơn thì 10 –

+1

Không cần đến Min() trong đó. –

206

thử này;

select gid 
from `gd` 
group by gid 
having count(*) > 10 
order by lastupdated desc 
+25

+1 vì có Điều này là * luôn luôn * mệnh đề mà chúng không thể dạy đúng cách trên các khóa học hoặc sách về sql và biết nó thường là dấu hiệu cho thấy người lập trình đã vượt quá mức độ mới. – Cruachan

+0

Cảm ơn bạn! Nó hoạt động –

+0

Cố định vấn đề của tôi là tốt, cảm ơn rất nhiều. –

21

Tôi không chắc chắn về những gì bạn đang cố gắng làm ... có lẽ cái gì đó như

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC 
+0

MSSQL cho *" tên cột không hợp lệ "* lỗi phân tích cú pháp cho' num'. 1 anyway cho cú pháp sạch (có thể được thiết lập của tôi, hoặc ms ... ahh tốt). – samosaris

+0

Cung cấp bí danh cho tất cả các cột trong lựa chọn. –

12

thử

SELECT DISTINCT gid 
FROM `gd` 
group by gid 
having count(*) > 10 
ORDER BY max(lastupdated) DESC 
+0

Cảm ơn bạn! Nó hoạt động –

4

- tìm kiếm các trạm thời tiết với một nửa còn thiếu -hồ sơ hàng giờ

SELECT stationid 
FROM weather_data 
WHERE `Timestamp` LIKE '2011-11-15 %' AND 
stationid IN (SELECT `ID` FROM `weather_stations`) 
GROUP BY stationid 
HAVING COUNT(*) != 48; 

- biến thể o f yapiskan với một vị trí .. trong .. chọn

1

tôi nghĩ bạn không thể thêm count() với where. bây giờ nhìn thấy lý do tại sao ....

where là không giống như having, having có nghĩa là bạn đang làm việc hoặc đối phó với nhóm và cùng làm việc đếm, nó cũng là đối phó với cả nhóm,

tại cách đếm nó đang làm việc như toàn bộ nhóm

tạo một bảng và nhập một số id và sau đó sử dụng:

select count(*) from table_name 

bạn sẽ tìm thấy tổng giá trị có nghĩa là nó được chỉ ra một số nhóm! do đó where không được thêm với count();

9

phiên bản Chỉ cần học mà không phải khoản:

select * 
from (
    select gid, count(*) as tmpcount from gd group by gid 
) as tmp 
where tmpcount > 10; 
3

Không thể có chức năng tổng hợp (. Ex COUNT, MAX, vv) trong một mệnh đề WHERE. Do đó, chúng tôi sử dụng mệnh đề HAVING. Vì vậy toàn bộ truy vấn sẽ là tương tự như sau:

SELECT column_name, aggregate_function(column_name) 
FROM table_name 
WHERE column_name operator value 
GROUP BY column_name 
HAVING aggregate_function(column_name) operator value; 
Các vấn đề liên quan