Справка по запросам - Как получить всех покупателей, которые делали покупки в любом из 20 лучших магазинов? - PullRequest
0 голосов
/ 21 января 2019

Мне нужно, чтобы все покупатели вошли в ЛЮБОЙ из 20 лучших магазинов по объему продаж ($).Я также хотел бы иметь разных клиентов.

Это 5 таблиц, которые у меня есть.

Потребитель: есть идентификатор клиента и некоторые другие детали

торговец: имеет storeid (Iне использовал это)

транзакция: имеет идентификатор клиента и orderid, в этой таблице нет данных элемента.

заказ: есть 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 голосов
/ 21 января 2019

Вы можете использовать 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
                );
0 голосов
/ 21 января 2019

То, что вы пытаетесь сделать = должно быть сделано с помощью join (или в, или существует)

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
...