Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询帮助-如何让所有在前20家商店中的任何一家商店购物的客户获得帮助?_Mysql_Sql_Apache Spark Sql - Fatal编程技术网

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

Mysql 查询帮助-如何让所有在前20家商店中的任何一家商店购物的客户获得帮助?,mysql,sql,apache-spark-sql,Mysql,Sql,Apache Spark Sql,我需要得到所有在前20名商店中任何一家商店购物的总销售额($)。我也希望有不同的客户 这是我的5张桌子 消费者:有客户id和一些其他详细信息 商户:有storeid(我没用这个) 事务:具有客户id和订单id,此表没有项目数据 订单:具有orderid、itemid和storeid itemtable:包含价格、名称和订单ID等项目详细信息 到目前为止,我得到了这个似乎不起作用的查询 select con.* from consumer con where con.id = (sel

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

这是我的5张桌子

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

商户:有storeid(我没用这个)

事务:具有客户id和订单id,此表没有项目数据

订单:具有orderid、itemid和storeid

itemtable:包含价格、名称和订单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语句中出错:RuntimeException:用作表达式的子查询返回多行:


我真的被困在这个问题上了,非常感谢您的帮助。您尝试使用的东西=应该使用join(或in,或exists)完成


您可以在中使用

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
                );

试着用in代替=。`其中con.id in(…)`由于子查询可以返回多个值,因此需要在(SELECT…)中使用
con.id,而不是
con.id=(SELECT…)
让我们假设它是前3个存储。请参阅…并注意,order在MySQL中是一个保留字
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
                );