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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2013, 00:36   #11
bolk007
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 12
По умолчанию

а не можете подсказать как делать? вроде задумка такая что сделать COUNT по P.ORG_ID или не по ней надо делать
bolk007 вне форума Ответить с цитированием
Старый 04.04.2013, 00:40   #12
bolk007
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 12
По умолчанию

SELECT O.NAME AS ORG_NAME, COUNT(P.ORG_ID)
FROM ORGANIZATION AS O, PERSON AS P
GROUP BY P.ORG_ID
COUNT(P.ORG_ID) F
WHERE P.ORG_ID=O.ORG_ID

так можно писать?
bolk007 вне форума Ответить с цитированием
Старый 04.04.2013, 00:45   #13
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

подзапросы уже изучали?

Цитата:
так можно писать?
нет, структура запросов всегда одназначна, каждый блок начинается с кляузы - FROM, GROUP BY, WHERE ... а у вас COUNT(P.ORG_ID) F
неприкаенный, выкинуть его. далее каждый блок должен находится на своей позиции, а не в хаосе. вощем почитайте про структуру запроса select

Последний раз редактировалось eval; 04.04.2013 в 00:52.
eval вне форума Ответить с цитированием
Старый 04.04.2013, 00:47   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так пойдёт?

Код:
SELECT O.ORG_ID, O.NAME AS ORG_NAME, COUNT(*) as COUNT_PEOPLE
FROM PERSON AS P, ORGANIZATION AS O
WHERE P.ORG_ID=O.ORG_ID 
GROUP BY O.ORG_ID, O.NAME
разумеется, вместо WHERE P.ORG_ID=O.ORG_ID можно написать JOIN



Цитата:
Сообщение от eval
лучше синтаксис джойнов, оно нагляднее и понятнее
ну это, как говорится, "whom how"
другое дело, когда без left / right join'ов не обойтись (хотя мне лично очень нравится оракльный плюсик в скобках возле связи: where a.id = b.id(+) - это и просто и удобно и наглядно). Но к сожалению, это нигде, кроме Оракла не допустимо...
Ну это лично моё мнение/субъективное отношение. Уж именно так я с детства SQL запросы писать привык...
хотя, по сути, соглашусь - join'ы намного универсальнее!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2013, 01:02   #15
bolk007
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
подзапросы уже изучали?

нет, структура запросов всегда одназначна, каждый блок начинается с кляузы - FROM, GROUP BY, WHERE ... а у вас COUNT(P.ORG_ID) F
неприкаенный, выкинуть его. далее каждый блок должен находится на своей позиции, а не в хаосе. вощем почитайте про структуру запроса select
спасибо за разъяснение я сейчас все сразу учу поэтому и каша в голове
bolk007 вне форума Ответить с цитированием
Старый 04.04.2013, 01:06   #16
bolk007
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так пойдёт?

Код:
SELECT O.ORG_ID, O.NAME AS ORG_NAME, COUNT(*) as COUNT_PEOPLE
FROM PERSON AS P, ORGANIZATION AS O
WHERE P.ORG_ID=O.ORG_ID 
GROUP BY O.ORG_ID, O.NAME
разумеется, вместо WHERE P.ORG_ID=O.ORG_ID можно написать JOIN




ну это, как говорится, "whom how"
другое дело, когда без left / right join'ов не обойтись (хотя мне лично очень нравится оракльный плюсик в скобках возле связи: where a.id = b.id(+) - это и просто и удобно и наглядно). Но к сожалению, это нигде, кроме Оракла не допустимо...
Ну это лично моё мнение/субъективное отношение. Уж именно так я с детства SQL запросы писать привык...
хотя, по сути, соглашусь - join'ы намного универсальнее!
спасибо за код, но никак не могу понять COUNT по всем двум таблицам идет?
bolk007 вне форума Ответить с цитированием
Старый 04.04.2013, 01:16   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
спасибо за код, но никак не могу понять COUNT по всем двум таблицам идет?
count идёт не по таблицам.
Это АГРЕГАТНАЯ функция. Она применяется к группе.
Группой является набор данных, имеющий одинаковые значения полей, указанных в GROUP BY <список_полей>

т.к. мы группируем по коду подразделения (наименование подразделения добавлено в группу, чтобы это наименование можно было использовать в перечне выбираемых полей в SELECT),
то COUNT подсчитает, сколько записей имеет одинаковый код подразделения.
Разумеется, если бы мы это запрос сделали для одной таблицы ORGANIZATION, то count() вернул бы 1 (единицу) для всех подразделений.
Но, т.к. мы присоединили таблицу с сотрудниками, у нас будет столько записей по каждому подразделению, сколько сотрудников в этом подразделении.

Очень рекомендую Вам почитать книжку Мартина Грубера "Понимание SQL"

и не злоупотребляйте излишним цитированием. Это нарушение правил...
Удаляйте из цитаты весь лишний текст - то, без чего ваше сообщение имеет смысл, на что Вы не ссылаетесь!
Например, зачем Вы цитируете полностью мой текст, обращенный к eval???!

Последний раз редактировалось Serge_Bliznykov; 04.04.2013 в 01:19.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2013, 08:45   #18
bolk007
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Удаляйте из цитаты весь лишний текст
Хорошо, исправляюсь. Спасибо за книгу, скачала, изучаю.

Еще вопрос, не по этой теме. У меня еще одно задание по этим же таблицам. Мне новую тему создать для обсуждения или тут же писать?
bolk007 вне форума Ответить с цитированием
Старый 04.04.2013, 09:00   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

{$Модератор_моде OFF}

если по тем же таблицам, думаю, что не будет большим нарушением правил, писать тут, в этой же теме...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2013, 14:25   #20
bolk007
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 12
По умолчанию

еще одно задание:
в предположении, что структура подразделений трехуровневая написать sql-запрос, формирующий таблицу из трех колонок: подразделение третьего уровня, подразделение второго уровня, подразделение первого уровня

тут совсем не знаю с чего начать.

если PARENT_ID IS NULL то это подразделение первого уровня, это как бы ясно. но как для других писать?
bolk007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопросам знатокам и просто любителям, нужно составить не сложный sql запрос modz SQL, базы данных 3 14.08.2013 11:20
Нужно составить запросы настенка=) SQL, базы данных 4 26.05.2010 22:27
Составить запросы Lion4ik89 Фриланс 6 18.02.2010 07:53
нужно описать sql запросы BIS88 SQL, базы данных 3 26.02.2009 21:38