Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để có được số lượng Tiểu bang và thành phố của quốc gia bằng cách sử dụng truy vấn SQL từ cơ sở dữ liệu?

Bởi vì các quốc gia có thể có nhiều tiểu bang và mỗi tiểu bang có thể có nhiều thành phố khi bạn tham gia các thành phố này từ 1 đến nhiều và từ 1 đến nhiều nên số tiểu bang của bạn bị tăng cao. Vì vậy, bạn cần số lượng riêng biệt của trạng thái. Số thành phố đã là duy nhất cho quốc gia và tiểu bang, do đó không cần sự khác biệt. khi tiểu bang không phải là duy nhất đối với thành phố đồng quê, do đó cần có sự khác biệt. Tất nhiên, điều này giả định rằng bạn muốn có số lượng các tiểu bang duy nhất ở mỗi quốc gia.

SELECT c.name, count(distinct s.name) as statecount,  count(Ci.name) as CityCount
FROM countries c
INNER JOIN states s 
  on c.id = s.country_ID
INNER JOIN cities ci
  ON s.id = ci.state_id
GROUP BY C.name

Hoặc giữ ký hiệu tham gia kiểu cũ của bạn:

SELECT c.name, count(distinct s.name) as statecount,  count(ci.name) citycount 
FROM countries c,states s,cities ci
WHERE ci.state_id = s.id 
  and s.country_id = c.id 
GROUP BY s.name

Hãy xem xét ví dụ sau: http://rextester.com/ZGYF56786

hoặc bằng hình ảnh bên dưới

Xem thời điểm kết hợp xảy ra giữa quốc gia, tiểu bang và thành phố. trạng thái bị lặp lại do liên kết với thành phố, làm cho trạng thái không còn duy nhất trong cột đó nữa, bằng cách thực hiện phân biệt, chúng tôi chỉ trả về số lượng 2 trạng thái thay vì 7, một cho mỗi bản ghi.

+-----+------------+-------------+
| USA | Illinois   | Chicago     |
| USA | Illinois   | Springfield |
| USA | Illinois   | Peoria      |
| USA | California | LosAngeles  |
| USA | California | Sacramento  |
| USA | California | SanDeigo    |
| USA | California | Hollywood   |
| USA | California | Oakland     |
|-----|------------|-------------|
|Name | statecount | Citycount   |
| USA | 2          | 7           | <-- Is this result correct? (i hope so)
| USA | 7          | 7           | <-- or this one? (then why bother just count(*) and only 1 count needed.
+-----+------------+-------------+

Tôi nghĩ bạn muốn có kết quả đầu tiên vì chỉ có 2 tiểu bang trong bảng của Hoa Kỳ được liệt kê và 7 thành phố.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - GIỮA sẽ không chọn kết quả chính xác

  2. Đá quý Ruby mysql2 được biên dịch cho phiên bản thư viện máy khách mysql sai

  3. Truy vấn hùng hồn về Laravel

  4. django auth Trường email người dùng cắt ngắn

  5. Không thể tìm nạp dữ liệu Unicode bằng ngôn ngữ Hindi từ PHP và MySQL