настроить запрос для вывода строк, которые имеют более 1 записей - PullRequest
0 голосов
/ 22 сентября 2019

Как получить те записи, которые имеют более 1 записей?

Если это не имеет смысла ... позвольте мне объяснить:

Из приведенной ниже таблицы я хочу получить доступ ксумма комиссии всех строк, к которым присоединяется тип, и «у них более 1 записи с одинаковым downmem_id».

У меня есть этот запрос, но он не учитывает сценарий с дополнительными записями ...

$search = "SELECT sum(commission) as income FROM `$database`.`$memcom` where type='joining'";

Вот таблица:

id   mem_id   commission   downmem_id   type            time
 2      1       3250            2      joining   2019-09-22 13:24:40
 3      45      500             2      egbvegr        new time
 4      32      20              2      vnsjkdv        other time
 5      23      2222            2      vfdvfvf        some other time
 6      43      42              3      joining        time
 7      32      353             5      joining        time 
 8      54      35              5      vsdvsdd        time

Вот ожидаемый результат: это должна быть сумма идентификатора № 2, только 7, т.е.3250 + 353 = что угодно.

Он не должен содержать идентификатор № 6, потому что у него есть только 1 строка с таким же downmem_id.

Пожалуйста, помогите мне сделать этот запрос.

Ответы [ 3 ]

0 голосов
/ 22 сентября 2019

Вы можете использовать подзапрос, который найдет все downmem_id, имеющие более одного вхождения в таблице.

SELECT Sum(commission) AS income 
FROM   tablename 
WHERE  type = 'joining' 
       AND downmem_id IN (SELECT downmem_id 
                          FROM   tablename t 
                          GROUP  BY downmem_id 
                          HAVING Count(id) > 1);

DEMO

0 голосов
/ 22 сентября 2019

Другим подходом являются два уровня агрегации:

select sum(t.commission) income
from (select sum(case when type = 'joining' then commission end) as commission
      from t
      group by downmem_id
      having count(*) > 1
     ) t;

Основное преимущество этого подхода состоит в том, что он более легко поддерживает более сложные условия для других членов каждой группы - например, не более одного "присоединение «запись или обе» присоединение к записям и не более двух записей «vnsjkdv».

0 голосов
/ 22 сентября 2019

Использование EXISTS:

select sum(t.commission) income
from tablename t
where t.type = 'joining'
and exists (
  select 1 from tablename
  where id <> t.id and downmem_id = t.downmem_id
)

См. Демоверсию .Результаты:

| income |
| -----  |
| 3603   |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...