Ошибка при выполнении запроса select

Есть запрос:

SELECT lichniy_nomer, MAX(`sum`) FROM (
SELECT  lichniy_nomer, SUM(narushenie.shtraf)'sum' FROM protocol, narushenie
WHERE protocol.nomer_narusheniya=narushenie.nomer_narusheniya
GROUP BY (lichniy_nomer))t1
HAVING  MAX(`sum`) = (SELECT lichniy_nomer FROM (SELECT lichniy_nomer, MAX(`sum`) FROM (
SELECT  lichniy_nomer, SUM(narushenie.shtraf)'sum' FROM protocol, narushenie
WHERE protocol.nomer_narusheniya=narushenie.nomer_narusheniya
GROUP BY (lichniy_nomer))t1))

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

#1248 - Every derived table must have its own alias.

Как исправить, не могу понять.

Nicolas Chabanovsky's user avatar

задан 4 дек 2014 в 13:25

pixma's user avatar

1

Да, @smackmychi прав, такие монструозные конструкции тут ни к чему.

select sum(n.shtraf) `sum`, p.lichniy_nomer
from protocol p 
  join narushenie n on n.nomer_narusheniya = p.nomer_narusheniya
group by p.lichniy_nomer
order by `sum` desc
limit 1

Или если хочется с вложениями:

select s.`sum`, p.lichniy_nomer
from protocol p 
  join (select nomer_narusheniya, sum(shtraf) `sum`
        from narushenie
        group by nomer_narusheniya
        order by `sum` desc
        limit 1) s
  on s.nomer_narusheniya = p.nomer_narusheniya

ЗЫ Ошибка #1248 говорит, что все подзапросы должны иметь псевдонимы… что логично и аккуратно.

ответ дан 4 дек 2014 в 15:38

Yura Ivanov's user avatar

Yura IvanovYura Ivanov

26.4k2 золотых знака30 серебряных знаков57 бронзовых знаков

2

Для примера. Запрос:
SELECT id, sum(amount) FROM table group by ID order by 2 desc limit 1;
Вернет одну запись (limit 1) — идентификатор и сумму. Данная выборка сгруппирована по ID (group by ID) и отсортирована(order by) по убыванию (desc) второго столбца (order by 2), поэтому первая запись будет иметь максимальное значение суммы и соответствующий идентификатор. Практического опыта у меня в данной области нет, можно подождать ответа от кого-нибудь еще.

ответ дан 4 дек 2014 в 13:45

smackmychi's user avatar

smackmychismackmychi

8685 серебряных знаков10 бронзовых знаков

1248 — Every derived table must have
its own alias.

Google translate:
1248 — Каждая производная таблица должна иметь свой собственный псевдоним.

@Yura Ivanov написал все правильно, не стоит писать настолько страшные запросы для простых задач.

ответ дан 4 дек 2014 в 16:17

Get's user avatar

GetGet

3,57010 серебряных знаков8 бронзовых знаков

When running select query i am getting below error. I am new to postgres and need your suggestions on this.

ERROR: could not seek to end of segment 0 of relation pg_table1/23111/191232/112333: Input/output error

Please suggest what could be the reasons.

asked Dec 2, 2011 at 15:44

Space's user avatar

3

Messages like that are typically signs of some kind of corruption. This link touches on some similar things. Stark Presentation

answered Dec 2, 2011 at 16:35

Kuberchaun's user avatar

KuberchaunKuberchaun

29k7 gold badges50 silver badges59 bronze badges

1

Есть запрос:

SELECT * FROM (SELECT * FROM graph ORDER BY id DESC LIMIT 20) ORDER BY id ASC

. Им должны браться по порядку последние 20 записей. При выполнение выдает ошибку:

#1064 — У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около ‘ORDER BY id ASC LIMIT 0, 25’ на строке 1

В чем моя ошибка?


  • Вопрос задан

    23 июл. 2022

  • 128 просмотров

Нужно задать alias

SELECT * FROM (SELECT * FROM graph ORDER BY id DESC LIMIT 20) AS graph ORDER BY id ASC

Только зачем нужен такой странный запрос, можно же одним селектом обойтись?

Пригласить эксперта


  • Показать ещё
    Загружается…

14 июн. 2023, в 01:02

5000 руб./за проект

13 июн. 2023, в 23:37

1000 руб./в час

13 июн. 2023, в 23:22

15000 руб./за проект

Минуточку внимания

zolboch

0 / 0 / 0

Регистрация: 28.07.2022

Сообщений: 5

1

04.08.2022, 10:33. Показов 274. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день.
Все данные находятся в одной таблице User. 1-ый запрос дает верный результат, 2-ой приводит к ошибке. Что пишу не так?

1.

MySQL
1
select registration_type, count(1) from user where is_active=1 and registration_time > '2019-01-01' group by registration_type order by 2 desc limit 2;

2.

MySQL
1
select registration_type, count(1) from user where is_active=1 group by registration_type having registration_time > '2019-01-01' order by 2 desc limit 1;

ERROR 1054 (42S22): Unknown column ‘registration_time’ in ‘having clause’



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

04.08.2022, 10:33

Ответы с готовыми решениями:

Ошибка 1064 при выполнении запроса на update с select
Есть две таблицы: actual_general и reg_smsp
Обе таблицы содержат поля INN, а также поле "А" в…

В чем ошибка запроса?
Код запроса INSERT INTO `ties_lavto_copy` ( `kod_ties`,`kod_model` )
VALUES( (10050560,’ ‘ )…

Ошибка выполнения запроса с условие WHERE . IN (SELECT .)
Есть у меня в базе данных 2 таблицы: Securities, где хранятся ценные бумаги, и tempEQE06, где…

Ошибка запроса SELECT
Доброй ночи
Посылаю вот такой запрос:

"SELECT * FROM hotel_name WHERE type=3,star=5,district=2"…

Связанные select. В чем ошибка?
Здравствуйте.

Есть решение по связанным селект, но сколько бы ни пробовала, вложенные списки не…

2

1557 / 989 / 376

Регистрация: 31.05.2012

Сообщений: 3,494

04.08.2022, 10:38

2

having же не where. в нем результат агрегатных функций анализируется



0



PaulWist

281 / 171 / 87

Регистрация: 12.04.2022

Сообщений: 694

04.08.2022, 11:19

3

Цитата
Сообщение от zolboch
Посмотреть сообщение

select registration_type, count(1) from user where is_active=1 group by registration_type having registration_time > ‘2019-01-01’ order by 2 desc limit 1;

В Having надо «подставлять» либо агрегатную ф-ию, либо условие группировки, те

SQL
1
2
3
4
5
6
7
8
SELECT registration_type, COUNT(1) 
FROM USER 
WHERE is_active=1 
GROUP BY registration_type 
 
HAVING registration_TYPE =,<,> Тут значение группировки из GROUP BY
 
ORDER BY 2 DESC LIMIT 1;



1



SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Web Еще…Меньше

Проблемы

Рассмотрим следующий сценарий.

  • У вас есть компьютер, на котором установлен Microsoft SQL Server 2012.

  • У вас есть запрос, содержащий оператор case в инструкции SELECT и оператор case в инструкции Group By .

  • Два оператора case оцениваются как null.

  • Вы запускаете запрос.

В этом случае появляется следующее сообщение об ошибке:

Сообщение 8120, уровень 16, состояние 1, строка 3Column «<имя столбца>» недопустимо в списке SELECT, так как он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Например, вы запускаете следующий запрос:create database testgouse testgocreate table tvt ( v1t binary(1) null)create table tln (ln numeric(5) not null)goselectcase when 1=2 then t1.col1else 10end,casewhen t1.col1 = 2 then t1.col2endfrom (select t2.v1t as col1, 10 as col2 from tvt t2) t1group by case when 1=2 then t1.col1else 10end,casewhen t1.col1 = 2 then t1.col2endgo В запросе оператор «When 1 = 2, T1. Столбец1 else 10» возвращает значение 10. Эта проблема возникает при замене «10» с помощью значения NULL.Примечание.Эта проблема не возникает при удалении одного из операторов case из оператора SELECT или оператора Group By .

Решение

После применения исправления необходимо включить флаг трассировки, чтобы сделать его работоспособным. Если вам нужно применить это исправление, обратитесь в службу поддержки Майкрософт.

Эта проблема впервые устранена в следующем накопительном обновлении SQL Server.

Накопительное обновление 6 для SQL Server 2012 с пакетом обновления 1 (SP1) /en-us/help/2874879

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе «Применяется к».

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при выполнении запроса post сеанс отсутствует или удален
  • Ошибка при выполнении запроса post к серверу
  • Ошибка при выполнении запроса post к ресурсу ошибка субд
  • Ошибка при выполнении запроса post к ресурсу e1crdbg rdbgtest
  • Ошибка при выполнении запроса post к ресурсу e1cib uobjects