Пользовательский запрос с группировкой по, а затем считать

0

Я использую events.I хотел бы знать, как рассчитать сумму в случае или используя один запрос http://sqlfiddle.com/#!9/ad6d1c/1

DDL для вопроса:

CREATE TABLE 'table1' (
  'id' int(11) NOT NULL,
  'group_id' int(11) NOT NULL DEFAULT '0',
  'in_use' tinyint(1) NOT NULL DEFAULT '1' COMMENT '0->in_use,1->not_in_use',
  'auto_assign' tinyint(1) NOT NULL DEFAULT '0' COMMENT '0->Yes,1->No'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE 'table1'
  ADD PRIMARY KEY ('id');
ALTER TABLE 'table1'
  MODIFY 'id' int(11) NOT NULL AUTO_INCREMENT;
INSERT INTO 'table1' ('id', 'group_id', 'in_use', 'auto_assign') VALUES
(1, 3, 1, 0),(2, 2, 0,1),(3, 1, 1, 1),(4, 3, 1, 0),(5, 3, 0, 0),(6, 3, 0, 1),
(7, 3, 1, 0),(8, 3, 0, 1),(9, 3, 0, 1),(10, 3, 0, 1),(11, 3, 0, 1),(12, 3, 1, 1),
(13, 3, 1, 0),(14, 3, 0, 0),(15, 3, 0, 0),(16, 3, 0, 0),(17, 3, 0, 0),(18, 3, 1, 1),
(19, 3, 0, 0),(20, 3, 0, 0)

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

| count | in_use | auto_assign |  sum | check_count |
|-------|--------|-------------|------|------------ |
|     7 |      0 |           0 |  11  |     5       |
|     5 |      0 |           1 |  07  |     3       |
|     4 |      1 |           0 |  11  |     5       |
|     2 |      1 |           1 |  07  |     3       |

Здесь мы видим, что auto_assign=0 имеет общее число 11 (7+4), а auto_assign=1 имеет 7 счетчиков (5+2), этот счет должен быть сохранен в новую sum столбца.

check_count столбец процентное значение sum column.Percentage будет предопределена.

Давайте возьмем 50%, так что счет 11 (значение столбца суммы) → 50% = 5.5 = ROUND (5.5) == 5 (In integer). То же самое число 7 (значение столбца суммы) → 50% = 3.5 = ROUND (3.5) = 3 (целое число)

Здесь 5 > 4(auto_assign=0 and in_use=1 ) Поэтому нужно вставить запись в другую таблицу (table2). если нет, то нет.

То же самое, если 3> 2, то также необходимо вставить запись в другую таблицу (table2).if, а не тогда.

Примечание. Эта логика, которую я хотел бы реализовать в event

Это немного сложно, но, пожалуйста, предложите мне, как это сделать в случае.

Подробное разъяснение:

здесь auto_assign =0 равно 5 для auto_assign =0 Но auto_assign=0 and in_use=1 имеют count 4 который less than 5, затем необходимо вставить запись в таблицу 2.

предположим, если мы получим счет 6 для auto_assign=0 and in_use=1, то нет необходимости вставлять запись в table2.

Так же,

здесь auto_assign =1 равно 3 для auto_assign =1 Но auto_assign=1 and in_use=1 имеют count 2 который less than 3, затем нужно вставить запись в таблицу 2.

предположим, если мы получим счет 4 для auto_assign=1 and in_use=1, то нет необходимости вставлять запись в table2.

Вставить запрос в таблицу2:

Insert into table2(cli_group_id,auto_assign,percentage_value,result_value) values(3,0,5,4)
  • 0
    Тиа не полный вопрос, потому что мы не можем видеть ваши данные, и ссылки могут со временем сломаться. Пожалуйста, включите входные данные непосредственно в вопрос.
  • 0
    Я не знаю, как включить данные непосредственно в вопрос.
Показать ещё 2 комментария
Теги:

1 ответ

0

DEMO Fiddle

Разбейте проблему вниз: нам нужно подсчет записей auto_Assigns; поэтому мы генерируем производную таблицу (B) с этим значением и присоединяемся к вашей базовой таблице в auto_Assign. Затем это дает нам столбец, который нам нужен для некоторых, и мы используем функцию truncate и модель деления, чтобы получить check_count

SELECT count(*), in_use, A.Auto_Assign, B.SumC, truncate(B.SumC/2,0) as check_Count
  FROM table1 A
  INNER JOIN (Select Auto_Assign, count(*) sumC 
              from table1 
              where Group_ID = 3
              Group by Auto_Assign) B
   on A.Auto_Assign = B.Auto_Assign
  WHERE GROUP_ID = 3
  Group by in_use, A.Auto_Assign

мы можем исключить предложение double where, присоединившись к нему:

SELECT count(*), in_use, A.Auto_Assign, B.SumC, truncate(B.SumC/2,0) as check_Count
  FROM table1 A
  INNER JOIN (Select Auto_Assign, count(*) sumC, Group_ID
              from table1 
              where Group_ID = 3
              Group by Auto_Assign, Group_ID) B
   on A.Auto_Assign = B.Auto_Assign
   and A.Group_ID = B.Group_ID
  Group by in_use, A.Auto_Assign

Мне нужно уточнить оставшуюся часть вопроса: я не уверен, что 5> 4, на что ты смотришь, и я не вижу ничего, кроме контрольной суммы, но это не так, но я не уверен что вам нужно.

Здесь 5> 4 (auto_assign = 0 и in_use = 1). Поэтому нужно вставить запись в другую таблицу (таблица2). если нет, то нет.

То же самое, если 3> 2, то также необходимо вставить запись в другую таблицу (таблица2).if, а не тогда.

Примечание. Эта логика, которую я хотел бы реализовать в случае

Это немного сложно, но, пожалуйста, предложите мне, как это сделать в случае.

Итак, чтобы создать событие: DOCS

Результат:

CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 6 Minutes
DO
  INSERT INTO table2 
  SELECT count(*) as mCount
       , in_use
       , A.Auto_Assign
       , B.SumC, truncate(B.SumC/2,0) as check_Count
  FROM table1 A
  INNER JOIN (SELECT Auto_Assign, count(*) sumC, Group_ID
              FROM table1 
              WHERE Group_ID = 3
              GROUP BY Auto_Assign, Group_ID) B
     ON A.Auto_Assign = B.Auto_Assign
    AND A.Group_ID = B.Group_ID
  GROUP BY  in_use, A.Auto_Assign
  • 0
    Спасибо за ответ с ожидаемым выводом. Но отсутствует, как я могу проверить вывод с циклом foreach в событии. Не могли бы вы помочь с этим?
  • 0
    Не уверен, что вы там, вам нужно прояснить вопрос на этой арене. Что вы хотите попасть в таблицу 2? Как будут выглядеть ожидаемые результаты в таблице 2?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню