2016-03-18 3 views
-3

упрощенная версия моего стола:Как я могу решить этот запрос?

------------------------------------------- 
| sender | recipient | date  | amount | 
------------------------------------------- 
| A  | B   | 2016-01-01 | 500.00 | 
| C  | B   | 2016-01-02 | 600.00 | 
| D  | C   | 2016-01-03 | 1025.00 | 
| D  | D   | 2016-01-04 | 300.00 | 
| D  | D   | 2016-01-05 | 300.00 | 
| D  | D   | 2016-01-06 | 300.00 | 
| D  | D   | 2016-01-07 | 300.00 | 
| D  | D   | 2016-01-08 | 300.00 | 
------------------------------------------- 

Как я могу получить recipient, который имеет 3 OR LESS строки суммирующих минимальной amount из 1024.00 или больше?

Он не принимает D, потому что он не имеет 3 ряда с более чем amount1024.00.

Ожидаемый результат:

----------- 
| recipient | 
----------- 
| B   | 
| C   | 
----------- 
+2

Используйте группу от, сумму(), и фильтр в наличии – Shadow

+0

Можете ли вы показать мне пример? Но должен иметь 3 строки суммирования 1024 ... – Jorge

+0

Посмотрев на ожидаемый результат, похоже, что вы ищете получателя с ** меньше ** чем три строки и количество> = 1024 ... – mauro

ответ

0

Это сложно. Главное наблюдение заключается в том, что сумма трех наивысших значений будет превышать 1024, если таковые будут делать 3.

В MySQL, вы можете сделать это с помощью переменных:

select recipient, sum(amount) as amount_3 
from (select t.*, 
      (@rn := if(@r = recipient, @rn + 1, 
         if(@r := recipient, 1, 1) 
         ) 
      ) as rn 
     from t cross join 
      (select @r := '', @rn := 0) params 
     order by recipient, amount desc 
    ) t 
where rn <= 3 
group by recipient 
having sum(amount) >= 1024; 
1

очень простой запрос:

select recipient 
from table 
group by recipient 
having count(*) <= 3 and sum(amount) >= 1024 
+0

У меня есть пустой результат .. . выбрать получателя из передач группа по получателю с подсчетом (*)> = 3 и суммой> = 1024; – Jorge

+0

И счетчик (*)> = 3 будет D, и он должен, потому что я хочу, чтобы только 3 строки (представьте, что у него 100) больше 1024. – Jorge

+0

@Jorge Я обновил запрос –

0
select distinct recipient 
from tablename t1 
where 1024 <= (select sum(amount) 
       from (select amount 
        from tablename t2 
        where t2.recipient = t1.recipient 
        order by amount desc 
        limit 3)) 
Смежные вопросы