powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / довольно сложный запрос DB2 + JDBC
3 сообщений из 3, страница 1 из 1
довольно сложный запрос DB2 + JDBC
    #32812463
Wi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Wi
Гость
___________школа 1___школа 2
Математика_____5________11
Русский________6________12
Физика_________0________13


условия такие: есть предметы, есть школы
школы привязаны к предметам (многие ко многим)
есть ученики - привязаны к школам (многие ко многим) и к предметам(многие ко многим)
(ограничений никаких нет - 1 ученик может учить разные предметы в разных школах)

числа - это количество учеников изучающих данный предмет в данной школе

нужно получить данные из базы (по JDBC) и вывести их на страничке

варианты:
1) сначала выбираем все школы (id, name), затем все предметы (id, name)
потом для каждой школы для каждого предмета считаем число учеников

минусы: СЛИШКОМ МНОГО обращений к базе

2) получить данные вот в таком виде:

idSchool idSubject COUNT
1________1________5
1________2________6
1________3________0
2________1________11
2________2________12
2 ________3________13

разобрать их на Java проблем нет
НО

я не могу написать такой запрос:

если делать внутренне объединение то выведутся не все строчки

если делать внешнее с таблицей учеников (т.е. с таблицей связей к ним), то
получится что COUNT считает поля с NULL
а DB2 так устроен что выдается ВОРНИНГ если в агрегатную функцию попадает NULL - этого хотелось бы избежать

если делать внешнее с подзапросом выводящем COUNT, то с COUNT проблем не возникает
но мне тогда получается нужно привязать таблицу учеников к школам и к предметам
а в ON можно указать только одну связь


собсна сам вопрос: как лучше поступить в такой ситуации??
...
Рейтинг: 0 / 0
довольно сложный запрос DB2 + JDBC
    #32813727
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько понял, таблицы примерно:
Код: plaintext
1.
2.
3.
4.
 1 . SCHOOL(ID, NAME)
 2 . SUBJECT(ID, NAME)
 3 . PEOPLE(ID, NAME)
 4 . SUBJECT_SCHOOL(SCHOOL, SUBJECT)
 5 . PEOPLE_SCHOOL(SCHOOL, SUBJECT, PEOPLE)

И тогда запрос:
Код: plaintext
1.
2.
3.
4.
SELECT Q1.SCHOOL, Q1.SUBJECT, COUNT(Q2.PEOPLE)
FROM SUBJECT_SCHOOL Q1
  LEFT OUTER JOIN PEOPLE_SCHOOL Q2 ON (Q2.SCHOOL = Q1.SCHOOL
    AND Q2.SUBJECT = Q1.SUBJECT)
GROUP BY Q1.SCHOOL, Q1.SUBJECT

Верно?
...
Рейтинг: 0 / 0
довольно сложный запрос DB2 + JDBC
    #32816639
Wi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Wi
Гость
О! Спасибо!!!

я и не знал что в лефт дждойне можно указать два поля связки :(

я правда уже по другому сделал
но все равно спасибо


кстати, ваш вариант можно сделать так:
только я не знаю что вместо вопросиков подставить, должно быть IF NULL 1 ELSE 0
в оракле было бы: DECODE(Q2.PEOPLE, NULL, 1, 0)


Код: plaintext
1.
2.
3.
4.
5.
SELECT Q1.SCHOOL, Q1.SUBJECT, COUNT(COALESCE(Q2.PEOPLE, 0 )) - SUM(???)
FROM SUBJECT_SCHOOL Q1
  LEFT OUTER JOIN PEOPLE_SCHOOL Q2 ON (Q2.SCHOOL = Q1.SCHOOL
    AND Q2.SUBJECT = Q1.SUBJECT)
GROUP BY Q1.SCHOOL, Q1.SUBJECT

а вообще наверна даже лучше так:
вместо вопросиков нужно заменить NULL на 0 а остальные на 1
в оракле было бы: DECODE(Q2.PEOPLE, NULL, 0, 1)

Код: plaintext
1.
2.
3.
4.
5.
SELECT Q1.SCHOOL, Q1.SUBJECT, SUM(???)
FROM SUBJECT_SCHOOL Q1
  LEFT OUTER JOIN PEOPLE_SCHOOL Q2 ON (Q2.SCHOOL = Q1.SCHOOL
    AND Q2.SUBJECT = Q1.SUBJECT)
GROUP BY Q1.SCHOOL, Q1.SUBJECT
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / довольно сложный запрос DB2 + JDBC
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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