Sql кумулятивный счет с двумя переменными - PullRequest
0 голосов
/ 15 октября 2018

У меня есть таблица с тремя столбцами: a, b и id.

Я хочу найти, используя sql, для каждого идентификатора количество равных (a, b) пар с идентификаторами ниже, чемданный идентификатор.По этой причине подход может быть объяснен как выполнение кумулятивного подсчета пар (a, b), когда таблица sql сортируется по id.

Я действительно не знаю, как реализовать это с использованием синтаксиса sql,Можете ли вы дать какой-нибудь совет, пожалуйста?


То, что я пробовал и не работает:

SELECT count(*), a, b, id FROM table GROUP BY a, b

Действительно не дает никакого совокупногорезультаты и показывает результаты сгруппированных индексов, так что меня это не интересует, и я не знаю, как его изменить.

Пример: Ввод:

a,b,id    
x,y,1    
x,y,2    
x,z,3    
t,y,4    
t,y,5

Вывод:

count,id

1,1
2,2
1,3
1,4
2,5

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Вы можете использовать subquery:

select t.id,
       (select count(*)
        from table t1
        where t1.a = t.a and t1.b = t.b and
              t1.id <= t.id
       ) as cnt
from table t;
0 голосов
/ 15 октября 2018

Используйте подзапрос в предложении выбора.Я предполагаю, что вы хотите посчитать следующим образом:

select
  (select count(*) from mytable m2 where m2.id < m1.id and m2.a = m1.a and m2.b = m1.b)
    as cnt,
  id
from mytable m1
order by id;

Начиная с MySQL 8.0 вы можете сделать это немного более элегантно с помощью предложения окна:

select count(*) over (partition by a, b order by id) as cnt, id
from mytable m1
order by id;
0 голосов
/ 15 октября 2018

Вы можете использовать тег Distinct, чтобы ограничить количество уникальных пар, возвращаемых в запросе.

Select t.id, count(*) from
    (Select Distinct id, a, b
       From &table
      Where id < &id) t
Group by id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...