我需要让所有在总销售额排名前 20 的商店中购物的顾客(美元)。我也希望拥有不同的客户。
这是我的 5 张桌子。
消费者:有客户ID和其他一些详细信息
商家 : 有商店 ID (我没有使用这个)
交易:具有客户 ID 和订单 ID,此表没有项目数据。
订单:具有订单 ID 和项 ID 和存储 ID
项目表:具有项目详细信息,例如价格,名称和订单ID
到目前为止,我得到了这个查询似乎不起作用。
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 语句中的错误:运行时异常:用作表达式的子查询返回的多行:
我真的被困在这个上面,非常感谢任何帮助。
您可以使用
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
);
你尝试用 = 做的事情应该通过加入(或加入,或存在)来完成
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