powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объявление переменной внутри запроса
16 сообщений из 16, страница 1 из 1
Объявление переменной внутри запроса
    #39295715
kirillsayapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, прошу ткнуть носом в проблему, составил запрос работает:
SELECT (SELECT C_NAME FROM ST_ABONENTS WHERE ST_ABONENTS.ID = t.C_AB_REF) as ABONENTNAME,
COUNT(q.C_ST) as CNT
FROM QRY_QUEUE q JOIN QRY_TYPE t on q.C_QRY_TYPE = t.ID
WHERE q.C_ST = 0
GROUP BY t.C_AB_REF
ORDER BY CNT ASC
Пытаюсь сделать так чтобы выводило строки где CNT меньше 20
SELECT (SELECT C_NAME FROM ST_ABONENTS WHERE ST_ABONENTS.ID = t.C_AB_REF) as ABONENTNAME,
COUNT(q.C_ST) as CNT
FROM QRY_QUEUE q JOIN QRY_TYPE t on q.C_QRY_TYPE = t.ID
WHERE q.C_ST = 0 AND CNT < 20
GROUP BY t.C_AB_REF
ORDER BY CNT ASC

ругает что cnt нет, что я делаю не так?
Заранее спасибо
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295719
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
having
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295720
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295724
kirillsayapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

спасибо, заработало HAVING COUNT(q.C_ST) < 20
но почему не заработало HAVING CNT < 20
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295726
kirillsayapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всё прочитал в документации, что алиасы нельзя использовать везде, если можно ещё вопрос,
SELECT (SELECT C_NAME FROM ST_ABONENTS WHERE ST_ABONENTS.ID = t.C_AB_REF) as ABONENTNAME,
COUNT(q.C_ST) as CNT
FROM QRY_QUEUE q JOIN QRY_TYPE t on q.C_QRY_TYPE = t.ID
GROUP BY t.C_AB_REF

как в таком запросе вывести 1 строку?
Извините за глупые вопросы раньше работал с mysql там проще, тут ROWNUM = 1 ломает CNT
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295728
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дочитайте доку.
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295730
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вывести 1 строку?

Одну строку или первую строку?
Rownum ничего не ломает, его надо научиться использовать.
Одну строку получится, если у вас одна группа.
Первую, вторую, энную - select from (order by "критерий - что такое первая, вторая, ... ?") where rownum = n.
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295735
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmwhere rownum = n.Только чушь пороть не надо.
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295736
kirillsayapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

SELECT
(SELECT C_NAME FROM ST_ABONENTS WHERE ST_ABONENTS.ID = t.C_AB_REF) as ABONENTNAME,
COUNT(q.C_ST) as CNT
FROM QRY_QUEUE q JOIN QRY_TYPE t on q.C_QRY_TYPE = t.ID
GROUP BY t.C_AB_REF
ORDER BY CNT DESC

пытаюсь вывести с этого запроса 1 строчку, и если делаю так:

SELECT
(SELECT C_NAME FROM ST_ABONENTS WHERE ST_ABONENTS.ID = t.C_AB_REF) as ABONENTNAME,
COUNT(q.C_ST) as CNT
FROM QRY_QUEUE q JOIN QRY_TYPE t on q.C_QRY_TYPE = t.ID
WHERE ROWNUM = 1
GROUP BY t.C_AB_REF

То выдёргивает 1 строчку не из моей выдачи, а скорее всего из таблицы, а мне нужно именно в этой выдаче
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295737
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic, да, пардон, виноват. rownum надо во внутреннем запросе поименовать.
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295739
kirillsayapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select *
from
( SELECT
(SELECT C_NAME FROM ST_ABONENTS WHERE ST_ABONENTS.ID = t.C_AB_REF) as ABONENTNAME,
COUNT(q.C_ST) as CNT
FROM QRY_QUEUE q JOIN QRY_TYPE t on q.C_QRY_TYPE = t.ID
GROUP BY t.C_AB_REF
ORDER BY CNT DESC
)
where rownum = 1

нашёл такой солюшен, но я так понял это не более чем костыль?
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295740
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
where rownum = 1 - сработает для первой строки

для любой строки по заданному критерию надо так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t as
 (select 1 n
    from dual
  union all
  select 3
    from dual
  union all
  select 100
    from dual)
select n, rn
  from (select n, rownum rn from (select t.* from t order by n desc))
 where rn = 3



То, что вы изучали другую СУБД - не повод спрашивать на форуме, не читая доку .
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295741
kirillsayapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за направление :)
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295742
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kirillsayapinнашёл такой солюшен, но я так понял это не более чем костыль?
Что есть "не более чем костыль", а что - "более"?
Вот это костыль или нет?
https://docs.oracle.com/database/121/DWHSG/analysis.htm#DWHSG9188
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295743
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmдля любой строки по заданному критерию надо так
В общем случае так не надо с 10g, когда появилась аналитика.
А экпириенс иногда обновлять - как раз надо.
Тем более что в 12 к аналитике добавлен синтаксический сахар в виде "fetch N rows only"
...
Рейтинг: 0 / 0
Объявление переменной внутри запроса
    #39295787
kirillsayapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

менее костыль это то, что разработчик предложил на этот случай, например в mysql это LIMIT, но я так понял что в oracle всё немного специфичное

В любом случае спасибо, правильно дали направление
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объявление переменной внутри запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]