SQL查找按国家/地区花费的平均金额?

时间:2014-03-18 13:39:29

标签: sql oracle average

我需要在oracle中使用下面的两个表找到国家/地区平均花费的金额。 Sale_total是每次销售所花的钱,Cust_country是客户的国家。任何帮助将不胜感激。

出售

Sale_Id
Payment_ID
Ship_Id
Customer_ID
Sale_total ==> Money Spent
Sale_date
Sale_time

客户

Cust_name
Cust_address
Cust_city
Cust_country
Cust_phone
Cust_age
Cust_sex

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT C.Cust_country as Country, AVG(S.Sale_total) as Spent
FROM Sale S INNER JOIN
Customer C on S.Customer_ID=C.Customer_ID
GROUP BY C.Cust_country

AVG是一个聚合函数,用于计算一组行中表达式的平均值。

详细了解here

答案 1 :(得分:0)

您需要在销售表和客户表之间建立链接。可能将Customer_ID作为主键放在Customer表中,并且Sale表中的Customer_ID是外键。假设您这样做,则可以运行以下查询。

SELECT
AVG(S.Sale_Total) Spent,
c.Cust_country
FROM
Sale S
INNER JOIN
Customer C on S.Customer_ID=C.Customer_ID
GROUP BY C.Cust_Country

这会告诉您平均花费的金额以及花费的国家/地区。

理解这个答案的关键是AVG(平均函数)是一个聚合函数,因为它结合了一些东西。通常当你有一个聚合函数时,你必须对其他列进行分组,因此我们为什么要包含GROUP BY子句。

您在Customer表中需要Customer Id的原因(除了是它的逻辑位置)之外,您可以在Customer表和Sale表之间建立关系。

建立关系的另一种方法是,您可以创建一个新表来将Customer和Sale链接在一起。称之为客户销售。例如:

<强> Customer_Sales

Customer_Id
Sale_Id

然后,您可以根据此调整查询以加入。