繁体   English   中英

SQL:如何在外键上使用DISTINCT而不在聚合函数中使用它

[英]SQL: How to use DISTINCT on a foreign key without using it in an aggregate function

因此,我想找到每个购买鲜花的人的平均收入。 但是,我需要考虑重复项,因为有些人可能多次购买了鲜花,而这会使平均价格混乱。

但是,当我将DISTINCT sales.customerid放进去时,它希望我将其放到一个聚合函数中,但是当我这样做时,它将平均值分开。 它没有将其平均化。

SELECT DISTINCT sales.customerid, AVG(moneyearned) AS averageearned
FROM customer,  sales
WHERE customer.customerid = sales.customerid 
AND (purchaseflower = TRUE);

我究竟做错了什么?

您可以使用group by而不是DISTINCT

顺便说一下,在这种情况下, INNER JOINCROSS JOIN更好。

SELECT customer.CustomerID, AVG(moneyearned) AS averageearned
FROM customer INNER JOIN sales
ON customer.CustomerID = sales.customerid 
WHERE purchaseflower = TRUE
GROUP BY customer.CustomerID;

SQLFiddle

使用GROUP BY子句代替Distinct,这会将所有重复的客户分组。

SELECT sales.customerid, AVG(moneyearned) AS averageearned
FROM customer,  sales
WHERE customer.customerid = sales.customerid 
AND (purchaseflower = TRUE)
GROUP BY sales.customerid;

但是请记住,SELECT中所有不在聚合函数中的属性都应存在于GROUP BY子句中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM