我有以下表格。
CUSTOMER_TABLE
Customer_ID |姓氏|名字| City_ID | Region_ID | COUNTRY_IDCountry_table
Country_ID |国家Region_table
Region_ID |地区| COUNTRY_IDCity_table
City_ID |城市| Region_ID | COUNTRY_ID
我需要找到城市客户的数量,即对于所有国家/地区,对于该国家的所有地区,对于该地区的所有城市,我需要得到否定。每个城市的客户。
例如,我编写了以下SQL来获取no。每个国家的客户:
SELECT a.country_id , b.country,count(*)
FROM Customer_Table a INNER JOIN Country_Table b
ON a.country_id = b.country_id
GROUP BY b.country , b.country_id ;
并获得不。特定国家/地区的每个地区的客户:
SELECT a.region_id , b.region , count(*)
FROM Customers_table a INNER JOIN Region_Table b
ON a.region_id = b.region_id
WHERE a.country_id ='USA' AND b.country_id ='USA'
GROUP BY region_id , country ;
我需要找到的是城市客户的数量,即对于所有国家,对于这些国家的所有地区,对于该地区的所有城市,我需要得到否定。每个城市的客户,如
Country | Region | City | no.of customers
USA | CA | San Francisco | 53
USA | CA | Los Angeles | 45
USA | CA | Sacramento | 16
USA | WA | Seattle | 46
USA | WA | Olympia | 9
UK | England | London | 89
UK | England | Nottingham | 71
UK | Wales | Cardiff | 69
UK | Wales | Newport | 23
..................and so on for other countries.
答案 0 :(得分:4)
您的表格有冗余信息
由于它们是链接的,因此每个表只需引用其直接父级而不是层次结构中的所有父级。
所以客户只需要参考城市,城市只有区域,区域只有国家
SELECT
Country_Table.Country,
Region_Table.Region,
City_Table.City,
Count(Customer_Id) AS Customers
FROM
Country_Table
INNER JOIN Region_Table ON Region_Table.Country_Id = Country_Table.Country_Id
INNER JOIN City_Table ON City_Table.Region_Id = Region_Table.Region_Id
INNER JOIN Customer_Table ON Customer_Table.City_Id = City_Table.City_Id
GROUP BY
Country_Table.Country,
Region_Table.Region,
City_Table.City
答案 1 :(得分:2)
试试这个:
select Country,Region,City,count(Customer_ID)
from Customer_table as cust
inner join Country_table on Country_ID=cust.Country_ID
inner join Region_table on Region_ID=cust.Region_ID
inner join Region_table on City_ID=cust.City_ID
group by country,Region,City
答案 2 :(得分:2)
对于SQL Server:
SELECT Country, Region, City, COUNT(Customer_ID) as [no.of customers]
FROM Country_Table
INNER JOIN Region_Table ON Country_Table.Country_ID = Region_Table.Country_ID
INNER JOIN City_Table ON City_Table.Region_ID = Region_Table.Region_ID
INNER JOIN Customer_Table ON Customer_Table.City_ID = City_Table.City_ID
GROUP BY Country, Region, City;