首页 > 解决方案 > 查询帮助 - 如何获取所有在前 20 家商店购物过的顾客?

问题描述

我需要让所有在总销售额($)前 20 家商店中的任何一家商店购物的客户。我也想有不同的客户。

这是我有的 5 张桌子。

消费者:有客户 ID 和其他一些详细信息

商家:有storeid(这个我没用过)

transaction:有customer id和orderid,这个表没有item数据。

order : 有 orderid 和 itemid 和 storeid

itemtable : 包含商品详细信息,例如价格、名称和 orderid

到目前为止,我的这个查询似乎不起作用。

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:用作表达式的子查询返回多行:

我真的坚持这一点,并感谢任何帮助。

标签: mysqlsqlapache-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
                );

推荐阅读