MYSQL количество различных данных зависит от того, если условие - PullRequest
0 голосов
/ 15 октября 2018

У меня действительно другая проблема с запросом к базе данных.Есть несколько разных сценариев:

У меня есть таблица, созданная из 3 столбцов.У них есть столбцы ID, ItemId, TypeId.Мне нужен запрос подсчета, он должен считать ItemId и TypeId вместе, но за исключением дублирующих столбцов.Например;

Id   ItemId   TypeId
--   ------   ------
1      1        1    -> count +1
2      1        1    -> ignore
3      1        2    -> count -1
4      1        2    -> ignore
5      1        1    -> count +1

count count = 1

В конце, если повторяется отдельная строка, count игнорирует эту строку.Но данные TypeId изменились для одного конкретного элемента, это должно увеличить или уменьшить количество.TypeId равен 1 счету + = 1, равен 2 счетам - = 1.

Ответы [ 2 ]

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

Попробуйте следующий запрос.При этом используются определяемые пользователем переменные сеанса .Он будет работать во всех случаях (включая пробелы в Id):

SELECT 
  SUM(dt.factor) AS total_count  
FROM 
( SELECT 
    @factor := IF(@item = ItemId AND 
                  @type = TypeId, 
                  0, 
                  IF(TypeID = 2, -1, 1)
                 ) AS factor, 
    @item := ItemId, 
    @type := TypeId 
  FROM your_table 
  CROSS JOIN (SELECT @item := 0, 
                     @type := 0, 
                     @factor := 0) AS user_init_vars 
  ORDER BY Id
) AS dt 

DB Fiddle DEMO

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

В MySQL, по-видимому, вы используете count(distinct):

select count(distinct itemId, typeId)
from t;

Однако у вас действительно есть проблема пробелов и островков.Вы смотрите на приказ , чтобы увидеть, где все меняется.

Если я верю, что у id нет пробелов, вы можете сделать:

select count(*)
from t left join
     t tprev
     on t.id = tprev.id + 1
where not ((t.itemId, t.typeid) <=> (tprev.itemId, t.prev.id))
...