使用子查询聚合:出现错误1111。我如何解决它?
Aggregation using subquery: Error 1111 occurs. How do I fix it?
请理解我使用Google翻译器是因为我的英语不熟练
首先,我在使用 mysql 时遇到错误 1111。
问题是在客户table.
中找到平均图书table销售额高于每个客户平均值的客户的名字
目前我写的代码是:
1)
select customer.name from customer, Orders
where avg(Orders.saleprice) <
(select avg(Orders.saleprice) from Orders, customer
where Orders.custid = customer.custid AND Orders.custid = 1
group by orders.custid);
select customer.name from customer, Orders, book
where avg(Orders.saleprice) <
(select avg(Orders.saleprice) from Orders, customer
where Orders.custid = customer.custid group by orders.custid);
在2)的情况下,我尝试一次比较值,但是代码失败,因为出现错误1111。在 1) 的情况下,代码编写时只有一个 custid 设置为 '1'。
上图是每位顾客购买金额的平均值table。
上图是这本书销量的平均值table。
这是我第一次使用订阅的 YouTuber 推荐的 Whosebug,所以我没有经验,英语也没有经验,但是任何帮助将不胜感激。
您可以通过以下方式解决问题:
-- select customers with average salesprice
select
customers.*,
avg(saleprice) as avgsaleprice
from customers
join orders on customers.id = orders.customer_id
group by customers.id, customers.name
-- filter result for customers having average greater then common order average
having avgsaleprice > (
select
avg(saleprice) as avgsaleprice
from orders
);
查看 fiddle SQLize.online
请理解我使用Google翻译器是因为我的英语不熟练
首先,我在使用 mysql 时遇到错误 1111。
问题是在客户table.
中找到平均图书table销售额高于每个客户平均值的客户的名字目前我写的代码是:
1)
select customer.name from customer, Orders
where avg(Orders.saleprice) <
(select avg(Orders.saleprice) from Orders, customer
where Orders.custid = customer.custid AND Orders.custid = 1
group by orders.custid);
select customer.name from customer, Orders, book
where avg(Orders.saleprice) <
(select avg(Orders.saleprice) from Orders, customer
where Orders.custid = customer.custid group by orders.custid);
在2)的情况下,我尝试一次比较值,但是代码失败,因为出现错误1111。在 1) 的情况下,代码编写时只有一个 custid 设置为 '1'。
上图是每位顾客购买金额的平均值table。
上图是这本书销量的平均值table。
这是我第一次使用订阅的 YouTuber 推荐的 Whosebug,所以我没有经验,英语也没有经验,但是任何帮助将不胜感激。
您可以通过以下方式解决问题:
-- select customers with average salesprice
select
customers.*,
avg(saleprice) as avgsaleprice
from customers
join orders on customers.id = orders.customer_id
group by customers.id, customers.name
-- filter result for customers having average greater then common order average
having avgsaleprice > (
select
avg(saleprice) as avgsaleprice
from orders
);
查看 fiddle SQLize.online