Mysql 查询帮助-如何让所有在前20家商店中的任何一家商店购物的客户获得帮助?
我需要得到所有在前20名商店中任何一家商店购物的总销售额($)。我也希望有不同的客户 这是我的5张桌子 消费者:有客户id和一些其他详细信息 商户:有storeid(我没用这个) 事务:具有客户id和订单id,此表没有项目数据 订单:具有orderid、itemid和storeid itemtable:包含价格、名称和订单ID等项目详细信息 到目前为止,我得到了这个似乎不起作用的查询Mysql 查询帮助-如何让所有在前20家商店中的任何一家商店购物的客户获得帮助?,mysql,sql,apache-spark-sql,Mysql,Sql,Apache Spark Sql,我需要得到所有在前20名商店中任何一家商店购物的总销售额($)。我也希望有不同的客户 这是我的5张桌子 消费者:有客户id和一些其他详细信息 商户:有storeid(我没用这个) 事务:具有客户id和订单id,此表没有项目数据 订单:具有orderid、itemid和storeid itemtable:包含价格、名称和订单ID等项目详细信息 到目前为止,我得到了这个似乎不起作用的查询 select con.* from consumer con where con.id = (sel
select con.*
from consumer con
where con.id =
(select
trans.consumerid
from transaction trans
join order ord on trans.orderid = ord.id
join
(select
ord.merchantid
from order ord
join itemtable item on ord.id = item.orderid
group by ord.merchantid
order by sum(ordet.price) desc
limit 50
) s20
on s20.merchantid = ord.merchantid
)
它给出了Spark上的当前错误:
SQL语句中出错:RuntimeException:用作表达式的子查询返回多行:
我真的被困在这个问题上了,非常感谢您的帮助。您尝试使用的东西=应该使用join(或in,或exists)完成
您可以在中使用
:
select c.*
from consumer c
where c.id in (select t.consumerid
from transaction t join
order o
on t.orderid = o.id join
(select o.merchantid
from order o join
itemtable i
on o.id = i.orderid
group by o.merchantid
order by sum(i.price) desc
limit 20
) s20
on s20.merchantid = o.merchantid
);
试着用in代替=。`其中con.id in(…)`由于子查询可以返回多个值,因此需要在(SELECT…)中使用con.id,而不是con.id=(SELECT…)
让我们假设它是前3个存储。请参阅…并注意,order在MySQL中是一个保留字
select c.*
from consumer c
where c.id in (select t.consumerid
from transaction t join
order o
on t.orderid = o.id join
(select o.merchantid
from order o join
itemtable i
on o.id = i.orderid
group by o.merchantid
order by sum(i.price) desc
limit 20
) s20
on s20.merchantid = o.merchantid
);