• Как составить MySQL запрос для начисления процента?

    @MaximaXXl
    Задача до ужаса странная, но вот:

    select af_id, sum(coalesce(amount_value,0))*0.1 sum_pair_10
    from (
            select 
            arur.af_id,
            arur.r_w_uid,
            lag(arur.r_w_uid,1,-1) over (partition by arur.af_id order by arur.r_w_uid) r_w_uid_1
            ,row_number() OVER (partition by arur.af_id order by arur.r_w_uid ) mod 2 pair_flag
            
            from arur, u_af 
            where u_af.id = arur.af_id ) t1  left join orders o on (o.uid in (t1.r_w_uid,t1.r_w_uid_1) and o.status = 'Completed')
    where pair_flag = 0
    group by af_id
    having count(distinct r_w_uid) >  5
  • Как составить MySQL запрос для начисления процента?

    @MaximaXXl
    можете написать просто lag(arur.r_w_uid), в Вашем конкретном случае это не играет роли. lag - показывает значение столбца со смещением ... почитайте лучше в инете, они с примерами покажут.
  • Как составить MySQL запрос для начисления процента?

    @MaximaXXl
    Т.к. появились нормальные связи, я накидал селект

    select af_id, sum(amount_value)*0.1 sum_pair_10
    from (
            select 
            arur.af_id,
            arur.r_w_uid,
            lag(arur.r_w_uid,1,-1) over (partition by arur.af_id order by arur.r_w_uid) r_w_uid_1
            ,row_number() OVER (partition by arur.af_id order by arur.r_w_uid ) mod 2 pair_flag
    
            from arur, u_af 
            where u_af.id = arur.af_id ) t1  left join orders o on (o.uid in (t1.r_w_uid,t1.r_w_uid_1) and o.status = 'Completed')
    where pair_flag = 0
    group by af_id
    having count(pair_flag) >  5


    Пока оставил но совсем непонятно зачем нам таблица u_af .
    оставил left join ... т.е. если у продавца есть 5 пар и больше клиентов но нет операций, строка будет выведена, насколько это нужно - не знаю

    P.S. можно и красивее написать, но боюсь вы запутаетесь в логике работы
  • Как составить MySQL запрос для начисления процента?

    @MaximaXXl
    так, я немного запутался с парами, я написал вверху парные операции, а Вам нужны парные клиенты ...

    Напишите селект который выводит пары для af_id = 52 и условие сортировки (кто неудачник, станет 9-м)

    И напишите связку клиентов с orders, а то я не понимаю откуда 1 550 000 для af_id = 52
  • Как составить MySQL запрос для начисления процента?

    @MaximaXXl
    Почему получилось 9 000 000?
    UPD2:
    Связи таблиц:
    orders.uid = u_af.uid
    u_af.id = arur.af_id

    как Вы сами написали o.uid = 60, а это 9*1 000 000 = 9 000 000

    Разберитесь со связями в таблицах, я первые селекты писал не загружая данные.

    Т.к. Вам надо работать с парами, и в этом коментарии стало понятна связь, я напишу селект ниже, но он все еще на старых условиях. Как только подгоните условия, все должно посчитаться быстро.

    select af_id, sum(Sum_pair)*0.1 sum_pair_10
    from (
            select 
            arur.af_id,
            o.amount_value + lag(o.amount_value,1,0) over (partition by arur.af_id order by o.id) Sum_pair,
            row_number() OVER (partition by arur.af_id order by o.id) mod 2 pair_flag
    
            from arur, u_af left join orders o on (o.uid = u_af.uid and o.status = 'Completed')
            where u_af.id = arur.af_id) t1
    where pair_flag = 0
    group by af_id
  • Как составить MySQL запрос для начисления процента?

    @MaximaXXl
    Пары формируются следующим образом:
    Если посмотреть в таблицу arur, то можно увидеть что для, например, af_id = 52 есть несколько записей в столбце r_w_uid. Если взять все записи r_w_uid относящиеся af_id = 52 и поделить их на 2, то получим количество пар. Остаток не включается в пары.


    Вы, уважаемый, странные вещи говорите. т.к. Вы ищете кол-во эфимерных пар (вам просто надо делить на 2, нет зависимости в данных отвечающих за парность) то не морочте голову ни себе ни людям. Умножте на 2 вашу константу с которой сверяете (5 пар = 10 значений) и опишите это условие в having указав ">" или ">=" вашего сокрального значения "то получим количество пар. Остаток не включается в пары."

    select
    arur.af_id,
    sum(o.amount_value) * 0.1 sum_10p
    from arur, u_af left join orders o on (o.uid = u_af.uid and o.status = 'Completed')
    where u_af.id = arur.af_id
    group by arur.af_id
    having count(arur.r_w_uid) > 5*2
  • Как составить MySQL запрос для начисления процента?

    @MaximaXXl
    select
    arur.af_id,
    sum(o.amount_value) * 0.1 sum_
    from arur, u_af left join orders o on (o.uid = u_af.uid and o.status = 'Completed')
    where u_af.id = arur.af_id
    group by arur.af_id
    having count(arur.r_w_uid) > 5

    Я не очень понял по поводу status = Completed, просто вписал что считать только их