Я использую 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)
Разбейте проблему вниз: нам нужно подсчет записей 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