需要帮助编写SQL查询

时间:2010-07-10 12:30:05

标签: sql mysql sql-server database oracle

我有以下表格。

  

CUSTOMER_TABLE
  Customer_ID |姓氏|名字| City_ID | Region_ID | COUNTRY_ID

     

Country_table
Country_ID |国家

     

Region_table
Region_ID |地区| COUNTRY_ID

     

City_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.

3 个答案:

答案 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;