Ограничение количества sum () в запросе в MySQL 8? - PullRequest
0 голосов
/ 06 августа 2020

Недавно я установил MySQL 8 и обнаружил, что некоторые запросы больше не выполняются. Ошибка:

SQL Error (1022): Can't write; duplicate key in table 'C:\WINDOWS\SERVIC~1\NETWOR~1\AppData\Local\Temp\#sql2db8_13_26'

Не было проблем с MySQL 5.7 или более ранними версиями.

Все мои исследования на форумах показали, что это обычно происходит в случае внешних ключей и ограничений. У меня их нет, только первичный ключ и 2 индекса.

Мой запрос создает 843 столбца с KPI, все из которых агрегируются с помощью sum (). Что произвело на меня впечатление, так это то, что если я удалю примерно 2/3 содержимого запроса, запрос будет выполняться нормально без каких-либо ошибок. Также, если я удалю группу по или все суммы, тоже не возникнет проблем.

Поэтому мне интересно, есть ли какое-либо новое ограничение количества агрегатных операторов в MySQL 8.0.

A упрощенный пример моего запроса ниже. Таблица работает под управлением MyISAM.

select Time,eNodeB,
round((sum(`L.E-RAB.SuccEst.QCI.1`)/sum(`L.E-RAB.AttEst.QCI.1`))*100,3) as RAB_Est_SR,
sum(`L.E-RAB.AttEst.QCI.1`) as RAB_Est_att,
...
from h_cell
where enodeb='10006' and time>='2018-01-01'
group by time

1 Ответ

1 голос
/ 06 августа 2020

Нет! нет никаких ограничений. Как сказано в сообщении об ошибке, у вас есть повторяющийся ключ для группировки. Это означает, что вы используете GROUP BY неверно! Вы должны использовать каждый столбец (кроме скалярных) перед select в предложении GROUP. Итак, вы должны изменить свой запрос на:

select Time,eNodeB,
round((sum(`L.E-RAB.SuccEst.QCI.1`)/sum(`L.E-RAB.AttEst.QCI.1`))*100,3) as RAB_Est_SR,
sum(`L.E-RAB.AttEst.QCI.1`) as RAB_Est_att,
...
from h_cell
where enodeb='10006' and time>='2018-01-01'
group by time,eNodeB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...