powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь с построением запроса
6 сообщений из 6, страница 1 из 1
Помощь с построением запроса
    #39639108
Arrsenal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Есть такие три таблицы:


Нужен запрос, выводящий подобное:

Запрос выводит название досуга (dosug.name) и считает сколько в нем обучающихся разных возрастов(меньше 7, от 7 до 11, от 12 до 17, от 18 до 30, и больше 30) (информация о дате рождения в таблице student) и сколько всего.

Возраст студентов вычисляется, например, подобным образом:
SELECT
TRUNC(months_between(sysdate, student.birthdate) / 12)
FROM student
...
Рейтинг: 0 / 0
Помощь с построением запроса
    #39639112
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LOL What?
12561782
...
Рейтинг: 0 / 0
Помощь с построением запроса
    #39639128
Arrsenal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня получился нужный результат, но текст запроса длинный получился

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
select name, col, col1, col2, col3, col4, col5
from 
(
select  dosug.name as name, (select count(cd_group.group_member_id) from cd_group where cd_group.dosug_id = dosug.dosug_id) as col,

(select count(cd_group.group_member_id) from cd_group where cd_group.dosug_id = dosug.dosug_id  and
(SELECT TRUNC(months_between(sysdate, student.birthdate) / 12) FROM student WHERE student.student_id = cd_group.student_id) < 7) as col1,

(select count(cd_group.group_member_id) from cd_group where cd_group.dosug_id = dosug.dosug_id  and
(SELECT TRUNC(months_between(sysdate, student.birthdate) / 12) FROM student WHERE student.student_id = cd_group.student_id) between 8 and 11) as col2,

(select count(cd_group.group_member_id) from cd_group where cd_group.dosug_id = dosug.dosug_id  and
(SELECT TRUNC(months_between(sysdate, student.birthdate) / 12) FROM student WHERE student.student_id = cd_group.student_id) between 12 and 17) as col3,

(select count(cd_group.group_member_id) from cd_group where cd_group.dosug_id = dosug.dosug_id  and
(SELECT TRUNC(months_between(sysdate, student.birthdate) / 12) FROM student WHERE student.student_id = cd_group.student_id) between 18 and 30) as col4,

(select count(cd_group.group_member_id) from cd_group where cd_group.dosug_id = dosug.dosug_id  and
(SELECT TRUNC(months_between(sysdate, student.birthdate) / 12) FROM student WHERE student.student_id = cd_group.student_id) > 30) as col5

from student 
inner join cd_group on student.student_id = cd_group.student_id
inner join dosug on cd_group.dosug_id = dosug.dosug_id
)
group by name, col, col1, col2, col3, col4, col5
...
Рейтинг: 0 / 0
Помощь с построением запроса
    #39639252
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему age то в досуге
это же не ограничитель, а атрибут студента
...
Рейтинг: 0 / 0
Помощь с построением запроса
    #39639318
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arrsenal,

набейте тестовые данные (with ...)

ps
решение аля pivot

.....
stax
...
Рейтинг: 0 / 0
Помощь с построением запроса
    #39639335
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что за category в досуге - хз, если это по возрасту, то я брал возраст напрямую у студента
создание таблиц можете пропустить, они ведь у вас есть, просто переделайте их правильно
(у меня под postgres)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
drop table if exists stu;
create table stu(
id serial,
name1 text,
name2 text,
birth timestamptz(0) default now(),
age int,
phone text
);

drop table if exists dosug;
create table dosug(
id serial,
name text,
cat smallint
);

drop table if exists stu_dos;
create table stu_dos(
stu_id int,
dos_id int
);


insert into stu (id,name1,name2,age) values (generate_series(1,1000), gen_str(20), gen_str(20), my_rand(5,50));
insert into dosug (id,name,cat) values (generate_series(1,50), gen_str(20), my_rand(1,5));
insert into stu_dos (stu_id,dos_id) select my_rand(1,50), my_rand(1,50) from generate_series(1,1000);


SELECT
t3.name,count(stu_id),
SUM(CASE WHEN t2.age <7 THEN 1 END) AS cat1,
SUM(CASE WHEN t2.age BETWEEN 7 AND 11 THEN 1 END) AS cat2,
SUM(CASE WHEN t2.age BETWEEN 12 AND 17 THEN 1 END) AS cat3,
SUM(CASE WHEN t2.age BETWEEN 18 AND 30 THEN 1 END) AS cat4,
SUM(CASE WHEN t2.age >30 THEN 1 END) AS cat5

FROM stu_dos t1
JOIN stu t2 ON t1.stu_id = t2.id
JOIN dosug t3 ON t1.dos_id = t3.id
GROUP BY dos_id,t3.name

         name         | count | cat1 | cat2 | cat3 | cat4 | cat5 
----------------------+-------+------+------+------+------+------
 OoV5GOH5Dxmls1YLfoCW |    17 |      |    1 |      |    4 |   12
 srNkVsr0KVxf6v6Gcr6L |    20 |      |    1 |    3 |    5 |   11
 Ikio3JKSOA1Ge1W8XTud |    18 |      |    3 |    2 |    4 |    9
 NY4pRL45pM5LF45dJYmy |    19 |    1 |    1 |    1 |    6 |   10
 hXuFmSeHqqpcukF5VUvG |    29 |      |    1 |    3 |    8 |   17
 fvozVqlG9O3Du7TeW8Y5 |    22 |      |    3 |    1 |    6 |   12
 Zl3tbAlFqkESYmgRsDno |    16 |      |    4 |    3 |    4 |    5
 oRQ4WvXSCHp1muHBCMOA |    13 |      |    1 |    2 |    4 |    6
 6MLxr8qgPgCnTnTsGEdU |    18 |    2 |    4 |    1 |    5 |    6
 MPQtYq2nnA3aEN5cklob |    18 |      |    2 |    1 |    3 |   12
 Fm4KUONgCq5mamfnStF5 |    22 |      |    4 |    2 |    4 |   12
 6fiuRoDa5Vz1pv4hK3Cn |    16 |    2 |    2 |    1 |    2 |    9
 I0ff93kh814g6u8QxDGK |    24 |      |    4 |    3 |    5 |   12
 m5X4GjQetYoxhXMW5vsI |    17 |    1 |    2 |      |    5 |    9
 wWnldVHrFrn5NqLp7qdf |    27 |      |    4 |    2 |    5 |   16
 mHQoDJFuwdawJDQP4YKh |    20 |      |    3 |    3 |    7 |    7
 PuKv4rPyVTQClFJJUyKD |    28 |      |    3 |    7 |    5 |   13
 CwjfcGmBLjh9EaSmPfea |    19 |    1 |    1 |    1 |    6 |   10
 fbhCd5QFpvVTuyy4YiKf |    16 |      |    3 |    4 |    3 |    6
 4vO9YAtNlkyxNGxTRDeo |    29 |    2 |    4 |    6 |    4 |   13
 ybnYEs6WMvTtiFXFWPUP |    17 |    1 |    1 |    2 |    8 |    5
 aYb9BpmGgZEPlDW2NEbl |    20 |    1 |    3 |    2 |    5 |    9
 tkUDfkGspnhBhJ6BdXrH |    22 |    3 |    3 |    1 |    4 |   11
 bYMgCgGyfOHf4xo7iVEj |    23 |      |    2 |    4 |    3 |   14
 GdySVAZjG7KniTyZGGGp |    10 |      |    1 |      |    4 |    5
 VOmbePSkkE5M1ayEVGjk |    23 |      |    2 |    1 |    9 |   11
 KbmVcDvHVEAMcurVmsoI |    34 |    1 |    2 |    5 |    9 |   17
 R3BtpaZUA8vkYgCd1blx |    15 |    1 |      |    4 |    6 |    4
 W2WdCBA4SbAsrO2O4BbK |    20 |      |    6 |    3 |    2 |    9
 SaQkQ5KP7wc5gHgw5rIo |    16 |      |      |    2 |    2 |   12
 WmTsKZoDrBsnzsIqeZy2 |    12 |      |    2 |    1 |    6 |    3
 f0edT6p8vdMYvlql7cJV |    19 |      |    1 |    1 |    6 |   11
 YrUzGTWwm6aW3FNREQXT |    20 |      |    2 |    2 |    7 |    9
 TWWtvZSGHOAt5tJtG2D5 |    23 |      |    5 |    2 |    4 |   12
 upU3GTGWmZ8MvoYc5XHT |    19 |    1 |    1 |    3 |    4 |   10
 xMbxQAgkpjtEF2C2QPeI |    14 |      |    2 |    1 |    6 |    5
 Y4UCY1htLuQMS4ZcEd5q |    21 |    2 |    2 |    3 |    6 |    8
 5QFF9Wf9CF3xjGcUWVLK |    17 |    1 |      |    4 |    6 |    6
 zVsyjOFT9fZV1XN9N5Y5 |    22 |    1 |    2 |      |    4 |   15
 FcIOIpMlXNpTly2vsPhc |    20 |      |    1 |    2 |    9 |    8
 2e2Al1Lx7VL9mdROzWgJ |    15 |    1 |    2 |    1 |    4 |    7
 RgJo8XFe1ixlSmok6I9H |    17 |    1 |    1 |    2 |    2 |   11
 oLscuTKQgctD9n9iHQzf |    19 |    1 |    3 |    1 |    8 |    6
 djveqOy36F4kHFWIZVP5 |    22 |    1 |    4 |    3 |    6 |    8
 sdgjPoMiJoVaGLnZaiWE |    28 |      |    2 |    4 |    8 |   14
 9OW8xmOEcrsEZ5reV7UR |    16 |      |    3 |      |      |   13
 xiCy7GAhaNHdrTDsB7D6 |    24 |      |      |    4 |    7 |   13
 A39iOoXaLDPmdTKZ1llI |    28 |    2 |    2 |      |   10 |   14
 bCcHz6BFBNaanUAfXxTh |    16 |      |    1 |    2 |    5 |    8
 OaihtDgDRcJ7KEY9Q8Fw |    20 |      |    2 |    1 |    4 |   13
(50 строк)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помощь с построением запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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