就总销售额($)而言,我需要吸引所有在前20家商店中的任何一家购物的顾客。我也希望有不同的客户。
这些是我的5张桌子。
消费者:具有客户ID和其他一些详细信息
商家:具有storeid(我没有使用过此商品)
交易:具有客户ID和订单ID,此表中没有商品数据。
order:具有orderid以及itemid和storeid
itemtable:具有商品详细信息,例如价格,名称和订单编号
到目前为止,我得到的查询似乎不起作用。
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:用作表达式的子查询返回的一行以上:
我真的很坚持这一点,感谢您的帮助。
答案 0 :(得分:1)
您可以使用in
:
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
);
答案 1 :(得分:0)
您要使用=进行的操作应使用join(或in或存在)完成
select distinct con.*
from
consumer con
inner join transaction trans on con.id = trans.consumerid
inner join order ord on trans.orderid = ord.id
inner join
(select
ord.merchantid
from
`order` ord
inner join itemtable item on ord.id = item.orderid /*whaaat, a stock item has an orderid? Sounds messed up..*/
group by ord.merchantid
order by sum(item.price) desc /*check this-your query has alias "ordet" not defined anywhere*/
limit 20 /*you wrote 50?*/
) s20
on s20.merchantid = ord.merchantid