Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2009, 23:06   #1
grinch
 
Регистрация: 17.03.2009
Сообщений: 5
По умолчанию Помогите написать несколько SQL запросов

Ребята, очень нужна помощь. Нужно написать запрос
1. Есть таблица "Учасники" к премеру, в которой одно поле - "дата". Нужно найти к-во записей имеющих одинаковое значение поля дата.
2 Есть 2 таблицы: "Кафедры" и "Преподаватели", соед. по полю код_кафедры. Нужно вывести кафедру, с минимальным количеством преподавателей.
Я нюп, сильно не пинайте Заранее спасибо.
grinch вне форума Ответить с цитированием
Старый 17.03.2009, 23:38   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот тут есть все для написания любого запроса:
http://programmersforum.ru/showpost....54&postcount=2
mihali4 вне форума Ответить с цитированием
Старый 18.03.2009, 13:43   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

кстати, по сути 1-го вопроса:
допустим есть в таблице Участники такие данные
01.01.2008
01.01.2008
01.01.2008
02.02.2009
02.02.2009
Какое здесь количество записей с одинаковой датой?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2009, 13:53   #4
grinch
 
Регистрация: 17.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
кстати, по сути 1-го вопроса:
допустим есть в таблице Участники такие данные
01.01.2008
01.01.2008
01.01.2008
02.02.2009
02.02.2009
Какое здесь количество записей с одинаковой датой?
А вот хз. У меня задание такое - а остальное додумай сам, как говорится.
Бред вобще. По логике в такой таблице как ты написал, должно выдать в результате запроса все 5. Я примерно прикидываю как алгоритмом посчитать это, если б это был язык программирования я б уже написал
grinch вне форума Ответить с цитированием
Старый 18.03.2009, 16:33   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от grinch
По логике в такой таблице как ты написал, должно выдать в результате запроса все 5
тогда такой достаточно несложный запрос:
Код:
select count(*) from prepod t where t.mydate in 
   (select t2.mydate from prepod t2 group by t2.mydate having count(*)>1)
второй запрос у меня по-простому не получается решить ;-(
получается только через тройную вложенность select from (select from (select from )))
я ещё подумаю...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.03.2009, 20:16   #6
grinch
 
Регистрация: 17.03.2009
Сообщений: 5
По умолчанию

Ага работает. Спасибо. Всё так просто оказалось, но я впервые вижу такое:
Код:
from prepod t
не знал что так можно копировать таблицы О.о
А второй выложи с 2 подзапросами, посмотрю, может и прийдет чего в голову. Спасибо большое.
grinch вне форума Ответить с цитированием
Старый 19.03.2009, 15:38   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
не знал что так можно копировать таблицы О.о
O-o ????
Это Вы о чём? Какое копирование? я использовал таблицу, задав ей алиас... Таблицу в запросе можно использовать несколько раз... что Вас так удивило?!
крайне рекомендую почитать всё таки литературку по SQL! Смотри пост #2 (и, кстати, для новичков очень полезно чтение старенькой (можно сказать уже классической) книги Мартин Грубер "Понимание SQL" - найдёте через поиск элементарно, и книжки "SQL.10 минут на урок [Бен Форта]")

Цитата:
А второй выложи с 2 подзапросами, посмотрю, может и прийдет чего в голову. Спасибо большое.
Да не вопрос!
Только мне крайне (подчёркиваю - КРАЙНЕ) не нравится составленный запрос.
У него только один плюс - он работает. :-)
Но ничего красивее я придумать не смог, простите...

Код:
select * from kafedra 
where kafedra.id in
  (select id_kafedra from 
     (select count(*) as cnt_prep, t.id as id_kafedra from prepod t
      group by t.id)
  where cnt_prep in (
     select min(cnt_prep) from 
     (select count(*) as cnt_prep, t.id as id_kafedra from prepod t
      group by t.id )))
Добавлено.
раз Вы проверили запрос и убедились, что он работает - значит у Вас есть СУБД!
Какую СУБД используете?
и, тестовую базу можно было сразу запаковать и приложить к своему письму...

Последний раз редактировалось Serge_Bliznykov; 19.03.2009 в 15:48. Причина: Добавлено.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2009, 17:37   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

имхо первый намного проще написать так

Код:
select 
  p.mydate, 
  count(p.mydate) 
from prepod p 
group by p.mydate 
having count(p.mydate)>1
soleil@mmc вне форума Ответить с цитированием
Старый 19.03.2009, 18:36   #9
grinch
 
Регистрация: 17.03.2009
Сообщений: 5
По умолчанию

Цитата:
O-o ????
Это Вы о чём? Какое копирование? я использовал таблицу, задав ей алиас... Таблицу в запросе можно использовать несколько раз... что Вас так удивило?!
Ну это как раз я и не знал.
Цитата:
крайне рекомендую почитать всё таки литературку по SQL! Смотри пост #2 (и, кстати, для новичков очень полезно чтение старенькой (можно сказать уже классической) книги Мартин Грубер "Понимание SQL" - найдёте через поиск элементарно, и книжки "SQL.10 минут на урок [Бен Форта]")
Форта есть. Читал. Видимо не очень хорошо. Просто ты используешь пару таких фокусов, что я не знал даже, что так можно.
Цитата:
Но ничего красивее я придумать не смог, простите...
Ничего. Мне не нужна скорость выборки. Мне главное чтоб работало.
Цитата:
раз Вы проверили запрос и убедились, что он работает - значит у Вас есть СУБД!
Какую СУБД используете?
и, тестовую базу можно было сразу запаковать и приложить к своему письму...
Использую Access Базу прикрепить не догадался, прошу прощения.
Спасибо, запрос работает. Долго сидел, разбирался что к чему и каким образом оно так работает.
Огрномное спасибо еще раз.
grinch вне форума Ответить с цитированием
Старый 19.03.2009, 18:46   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от soleil@mmc
имхо первый намного проще написать так
угу. только я не зря уточнял что нужно получить.
Ваш запрос практически полностью соответствует вложенному запросу из моего решения - он вернёт количество записей по каждой повторяющейся дате.
А вроде бы в постановке надо выдать — сколько всего таких записей (для примера из поста #3 должно вернуться число 5 - см.ответ ТС в #4) хотя, не исключаю, что он просто не так понял задание. :-)

soleil@mmc, а по 2-му запросу есть мысли/предложения?! мне мой вариант не нравится — я просто уверен, что его можно сделать красивее и эффективнее!!
___________________________________ ___________________________________ _________

дополнено
ну вот, написал пост и увидел ответ TC:
Цитата:
Сообщение от grinch
Спасибо, запрос работает. Долго сидел, разбирался что к чему и каким образом оно так работает.
ну вот... заработало, и автор вопроса похоже потерял к нему интерес...
как работает, надеюсь, разобрался?

Последний раз редактировалось Serge_Bliznykov; 19.03.2009 в 18:52. Причина: — дополнено, так как увидел ответ ТС....
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написание SQL-запросов tsergey Помощь студентам 9 12.02.2009 11:17
составление запросов в 2003 только при помощи SQL, ни мастеров, ни конструкторов использовать не нужно Baxxter Microsoft Office Access 3 09.12.2008 12:35
использование SQL запросов в коде VBA b00s Microsoft Office Access 3 26.04.2008 13:40
несколько запросов SQL Arteom БД в Delphi 3 09.09.2007 23:39