【发布时间】:2019-01-20 22:48:20
【问题描述】:
我需要获取在总销售额 ($) 排名前 20 位的商店中购物过的所有客户。我也想拥有不同的客户。
这是我有的 5 张桌子。
消费者:有客户 ID 和其他一些详细信息
商家:有storeid(这个我没用过)
transaction:有customer id和orderid,这个表没有item数据。
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:用作表达式的子查询返回多行:
我真的被困在这个问题上,如果有任何帮助,我将不胜感激。
【问题讨论】:
-
尝试使用 in 代替 =。 ` where con.id in (...)`
-
由于您的子查询可以返回多个值,因此您需要使用
con.id IN (SELECT ...)而不是con.id = (SELECT ...) -
假设它是前 3 家商店。见meta.stackoverflow.com/questions/333952/…
-
...注意 order 是 MySQL 中的保留字
标签: mysql sql apache-spark-sql