Есть запрос:
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.
Как исправить, не могу понять.
задан 4 дек 2014 в 13:25
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 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
smackmychismackmychi
8685 серебряных знаков10 бронзовых знаков
1248 — Every derived table must have
its own alias.Google translate:
1248 — Каждая производная таблица должна иметь свой собственный псевдоним.
@Yura Ivanov написал все правильно, не стоит писать настолько страшные запросы для простых задач.
ответ дан 4 дек 2014 в 16:17
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
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
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 Метки нет (Все метки)
Добрый день. 1.
2.
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 В чем ошибка запроса? Ошибка выполнения запроса с условие WHERE . IN (SELECT .) Ошибка запроса 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 |
|||
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 надо «подставлять» либо агрегатную ф-ию, либо условие группировки, те
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
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе «Применяется к».
Нужна дополнительная помощь?
Нужны дополнительные параметры?
Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.
В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.