Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Новичек в SQL ! Помощь в написании запросов  [new]
Дася
Member

Откуда:
Сообщений: 2
Здравствуйте!
Дана БД "Автовокзал".
Помогите, пожалуйста!
Есть две таблицы: 1)Trips (рейсы). поля: cod_trip, week_day. 2) Points (населенные пункты). поля: name_point.
Нужно вывести количество рейсов, которые проходят через Сокол в понедельник (понедельник это 1).
Я остановилась на этом и не знаю что дальше делать:

select count (*) from trips where cod_trip in
(select cod_trip from trips where week_day=1 AND
from points where name_point='_Сокол_');
29 апр 10, 20:38    [8711281]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Никак.
Потому что между trips и points отсутствует какая-либо связь.
29 апр 10, 20:43    [8711295]     Ответить | Цитировать Сообщить модератору
 Новичек в SQL ! Помощь в написании запросов  [new]
Дася
Member

Откуда:
Сообщений: 2
andrey_anonymous,

К сообщению приложен файл. Размер - 0Kb
29 апр 10, 20:49    [8711315]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
select count(*) 
from points p, point_routes pr, trips tr
where p.cod_point=pr.cod_point
  and pr.cod_route = tr.cod_route
  and tr.week_day=1
  and p.name_point='Сокол'
29 апр 10, 21:02    [8711351]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
ByM
Member

Откуда: Одесса
Сообщений: 179
Возможно тебе надо не только 'Сокол', а в разрезе всех рейсов и по дням тогда

select distinct tr.week_day, p.name_point, count(pr.cod_route) over (partition by tr.week_day, p.name_point) "Количество рейсов" 
from points p, point_routes pr, trips tr
where p.cod_point=pr.cod_point
  and pr.cod_route = tr.cod_route
30 апр 10, 09:01    [8712414]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
ByM
Возможно тебе надо не только 'Сокол', а в разрезе всех рейсов и по дням тогда

тогда
...
group by name_point, week_day
30 апр 10, 09:20    [8712493]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
ByM
Member

Откуда: Одесса
Сообщений: 179
andrey_anonymous
ByM
Возможно тебе надо не только 'Сокол', а в разрезе всех рейсов и по дням тогда

тогда
...
group by name_point, week_day

Возможно ты не заметил использование аналитической функции over. При её использовании group by не нужен, группировка не выполняеться.
30 апр 10, 09:49    [8712631]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
JaRo
Member

Откуда:
Сообщений: 1659
ByM
andrey_anonymous
ByM
Возможно тебе надо не только 'Сокол', а в разрезе всех рейсов и по дням тогда

тогда
...
group by name_point, week_day

Возможно ты не заметил использование аналитической функции over. При её использовании group by не нужен, группировка не выполняеться.
И смысл использовать аналитику для группировки? Гвозди Вы тоже микроскопом забиваете?
30 апр 10, 10:08    [8712744]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
JaRo
ByM
andrey_anonymous
ByM
Возможно тебе надо не только 'Сокол', а в разрезе всех рейсов и по дням тогда

тогда
...
group by name_point, week_day

Возможно ты не заметил использование аналитической функции over. При её использовании group by не нужен, группировка не выполняеться.
И смысл использовать аналитику для группировки? Гвозди Вы тоже микроскопом забиваете?


может у него есть информация о быстродействии первого и второго подходов, было б интересно послушать :)
30 апр 10, 10:15    [8712793]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
ByM
Возможно ты не заметил использование аналитической функции over.

Я заметил неправильное применение аналитической функции COUNT
А Вам следует подумать - почему не стоит применять аналитику для получения агрегата.
Хинт: сколько записей "в разрезе" "Сокол, понедельник" вернет Ваш запрос если рейсов, проезжающих через сокол по понедельникам, много более одного?
30 апр 10, 10:31    [8712927]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
andrey_anonymous
ByM
Возможно ты не заметил использование аналитической функции over.

Я заметил неправильное применение аналитической функции COUNT
А Вам следует подумать - почему не стоит применять аналитику для получения агрегата.
Хинт: сколько записей "в разрезе" "Сокол, понедельник" вернет Ваш запрос если рейсов, проезжающих через сокол по понедельникам, много более одного?


Ответ: он вернет много более одного
30 апр 10, 10:33    [8712952]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18482
Дык он DISTINCT туды запихал
Что-бы
ByM
Возможно ты не заметил использование аналитической функции over. При её использовании group by не нужен, группировка не выполняеться.
30 апр 10, 10:34    [8712959]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Вячеслав Любомудров
Дык он DISTINCT туды запихал

Да уж, тот еще читер :)
distinct по-хорошему вообще запретить надо - практически единственное его применение заключается в сокрытии ошибок.
30 апр 10, 10:44    [8713070]     Ответить | Цитировать Сообщить модератору
 Re: Новичек в SQL ! Помощь в написании запросов  [new]
A1ek5andr0
Member

Откуда: Киев
Сообщений: 49
Дася,

select count (1) 
  from trips t
where t.week_day = 1
and t.cod_route in
  (select pr.cod_route 
    from points_routes pr 
  where pr.cod_point = 
  (select p.cod_point 
    from points p 
  where upper(p.name_point) like upper('%sokol%')))
30 апр 10, 11:25    [8713517]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить