gps sana Ответов: 1

Почему мой SQL-запрос не отображает свои выходные данные


ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'with top_5_rows as (
    select queue_name,jobs_pending,jobs_running 
        fr' at line 1


Что я уже пробовал:

<pre>with top_5_rows as (
    select queue_name,jobs_pending,jobs_running 
        from queues order by jobs_pending+jobs_running desc limit 5 
)
select coalesce(top_5_rows.queue_name,'others'),
       sum(queues.jobs_tpending) as jobs_pending,
       sum(queues.jobs_running) as jobs_running
    from queues
    left outer join top_5_rows on
        top_5_rows.queue_name = queues.queue_name
    group by top_5_rows.queue_name
    order by case when top_5_rows.queue_name is not null then queuename else 'zzzzz' end;

Richard MacCutchan

Сообщение об ошибке говорит вам, что не так; проверьте синтаксис вашей команды.

gps sana

я не могу найти свою ошибку, не могли бы вы указать на нее@Richard MacCutchan

CHill60

Если вы хотите ответить кому-то, то используйте  Ответить  кнопка рядом с их комментарием.

Какую версию MySQL вы используете? Если это что-то до V8, то вы не можете использовать CTE (с)

gps sana

Я использую версию 5.1.73.

CHill60

Тогда вы не можете использовать with - см. решение Йохена Арндта для альтернативного подхода.

1 Ответов

Рейтинг:
0

Jochen Arndt

Это, вероятно, + подпишите.

with top_5_rows as (
    select queue_name,jobs_pending,jobs_running 
        from queues order by jobs_pending, jobs_running desc limit 5 
)
Видеть MySQL :: MySQL 5.7 справочное руководство :: 9.2.1.13 порядок оптимизации[^].

[РЕДАКТИРОВАТЬ]
MySQL [EDIT: до версии 8] не имеет WITH пункт. Вместо того, чтобы использовать вложенный запрос : MySQL :: Mysql 5.7 Справочное Руководство :: 14.2.10 Синтаксис Подзапросов[^]
[/РЕДАКТИРОВАТЬ]


gps sana

Ошибка 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с 'with top_5_rows as ( select queue_name, jobs_pending,jobs_running from queues ord' в строке 1

Jochen Arndt

Смотрите мой обновленный ответ.

CHill60

Просто для информации - они (наконец-то!) в том числе и с in V8 MySql

Jochen Arndt

Спасибо за информацию. Я обновлю свой ответ.

CHill60

5 б

Jochen Arndt

Спасибо.
Я только что увидел, что вы опубликовали причину в качестве комментария раньше (пока я писал свой ответ). Так что вы должны были опубликовать решение.

CHill60

Никаких проблем - теперь все решено, а это главное :)

gps sana

там, где вы ее разрешили.Можете ли вы выделить его

CHill60

Йохен сказал вам, что вы не можете использовать with и предоставил ссылку, показывающую вам, как использовать подзапрос. Подзапрос - это ваша единственная альтернатива.

gps sana

я использовал следующий подзапрос, но дело в том, что только job_pending сортируется, а столбец job_running не сортируется, так как я могу сортировать как ожидающие, так и запущенные coluns независимо.


выберите аргумент,jobs_pending,jobs_running от((выберите аргумент,jobs_pending,jobs_running от очередей заявок по jobs_pending +jobs_running деск лимит 5 ) "объединить все" (выбрать "другие", как аргумент ,сумма(jobs_pending) как jobs_pending ,сумма(jobs_running) как jobs_running из (выбрать jobs_pending,jobs_running от очередей заявок по jobs_running+jobs_pending деск лимит 18446744073709551615 смещения 5 ) фу)) фу;

Jochen Arndt

Где вы читали об этом знаке"+"?

gps sana

я погуглил его.Но теперь не мог найти источник

gps sana

проблема теперь в том, что jobs_pending работает для моих вышеприведенных подзапросов, которые не перечисляются в порядке убывания.

Jochen Arndt

Похоже, что вы погуглили полный запрос, но не заметили, что результаты были получены для какой-то другой базы данных SQL, но не для MySQL.

Вы заменили " + "на",", как было предложено в моем решении?

gps sana

я тоже попробовал запятую, так как она не работает.
Для справки вы можете посмотреть приведенную ниже таблицу как я получил результат:
+-------------+--------------+--------------+
| queue_name | jobs_pending | jobs_running |
+-------------+--------------+--------------+
| ncsim_short| 4549 | 237 |
| adice_long| 654 | 264 |
| ncsim_long| 605 | 116 |
/ нормальный| 361 | 26 |
| adice_short| 175 | 92 |
/ другие| 6344 | 739 |
+-------------+--------------+--------------+
смотрите столбец jobs_running, он не находится в порядке убывания.

Jochen Arndt

При указании нескольких столбцов порядка он устанавливает приоритет:
- Сначала сортировка по jobs_pending
- Если есть наборы записей с одинаковым количеством jobs_pending, отсортируйте их по jobs_running.

Любое другое не имело бы смысла. Это нарушило бы связь с именем очереди.

gps sana

не могли бы вы пожалуйста, покажите мне пример.Потому что сначала я уже разобрался с jobs_pending

Jochen Arndt

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

gps sana

только столбец jobs_pending выполняется в порядке убывания.Ineed как Jobs pending, так и jobs_running в нисходящем уровне.

gps sana

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