2010-03-25 37 views
6

Tôi có một bảng với tất cả các mã zip của Hoa Kỳ. mỗi hàng chứa tên thành phố và tiểu bang cho mã zip. Tôi đang cố gắng để có được một danh sách các thành phố xuất hiện ở nhiều tiểu bang. Điều này sẽ không thành vấn đề nếu không có số lượng mã zip trong cùng một thành phố ...Chọn số lượng/bản sao

Về cơ bản, tôi chỉ muốn thành phố ở trạng thái được tính là 1 thay vì đếm thành phố/trạng thái 7 lần vì có 2 mã zip trong thành phố/tiểu bang đó ...

Tôi không thực sự chắc chắn cách thực hiện việc này. Tôi biết tôi cần phải sử dụng số nhưng làm thế nào để tôi nói với mysql chỉ đếm một thành phố/tiểu bang kết hợp như là 1?

+1

database schema là gì? –

Trả lời

9
SELECT City, Count(City) As theCount 
FROM (Select City, State From tblCityStateZips Group By City, State) As C 
GROUP By City 
HAVING COUNT Count(City) > 1 

này sẽ trả về tất cả các thành phố, với số lượng, được chứa trong nhiều hơn một nhà nước.

Greenville 39
Greenwood 2
Greenbriar 3
, vv

0

Hãy thử sử dụng một lựa chọn riêng biệt

SELECT DISTINCT city, state FROM table GROUP BY city 
0

này sẽ làm các trick

Select CityName, Count (Distinct State) as StateCount 
From CityStateTable 
Group by CityName 
HAVING Count (Distinct State) > 1 
0

Bạn có lẽ đã tạo ra một bảng riêng biệt cho các mã zip sau đó để tránh sự trùng lặp.

Bạn muốn nhìn vào GROUP BY Aggregate.

1

nhóm lần thứ nhất về nhà nước và thành phố, sau đó nhóm kết quả trên thành phố:

select City 
from (
    select State, City 
    from ZipCode 
    group by State, City 
) x 
group by City 
having count(*) > 1 
+0

Điều này đã gần như vậy! Chỉ cần thay đổi dòng đầu tiên thành: CHỌN thành phố, COUNT (thành phố) là c – mike

+0

@mike: Vì vậy, bạn muốn có bao nhiêu tiểu bang mỗi thành phố cũng xuất hiện? Đó không phải là câu hỏi, vì vậy tôi không đưa nó vào câu trả lời. – Guffa

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