Как ранжировать и перечислять первые 10 order_ids для каждого user_id, который заказал продукт? - PullRequest
0 голосов
/ 16 июня 2019
This is the A/B Experiment table with 4 columns:
    1. user_id
    2. experiment_id
    3. experiment_date
    4. experiment_type (values are either: test or control - group)

This is the Order table with 3 columns:
    1. user_id
    2. order_sku 
    3. order_date

Я пытаюсь перечислить 10 лучших user_ids, которые заказали продукт, и ранжировать его для каждого опыта эксперимента.

The output Table should look like this:
1. experiment_id
2. Rank
3. user_id
4. experiment_type
5. experiment_date

Как бы я это сделал в mySQL?Любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 16 июня 2019

вы используете RANK() с INNER JOIN

select RANK() as Rank , experiment_id , user_id , experiment_type , experiment_date 
from experiment e 
inner join order o 
where e.user_id=o.user_id 
0 голосов
/ 16 июня 2019

Вот мое решение.

SELECT e.*, r.rank FROM `Experiment` e
LEFT JOIN (
  SELECT c.user_id, c.rank FROM
    (SELECT user_id, COUNT(user_id) as rank FROM `Order` GROUP BY user_id) c
  ORDER BY c.rank DESC LIMIT 10
  ) r ON e.user_id = r.user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...