查询帮助-如何获得所有在前20家商店中购物的客户?

时间:2019-01-20 22:48:21

标签: mysql sql apache-spark-sql

就总销售额($)而言,我需要吸引所有在前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:用作表达式的子查询返回的一行以上:

我真的很坚持这一点,感谢您的帮助。

2 个答案:

答案 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