查询帮助 - 如何吸引在前 20 家商店中的任何一家购物的所有客户



我需要让所有在总销售额排名前 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

相关内容

  • 没有找到相关文章

最新更新