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

Задание такое:
Вывести всех спортсменов (все атрибуты спортсмена) + лучший спортсмен в его виде спорта + худший спортсмен в его виде спорта (лучший / худший считается на основе «среднего места» в данном виде спорта).

Таблица, в свою очередь, выглядит так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE Sportsmans( 
  SportsmanID INTEGER NOT NULL PRIMARY KEY, 
  FirstName VARCHAR(50) NOT NULL,
  MiddleName VARCHAR(50), 
  LastName VARCHAR(50) NOT NULL, 
  SportTypeID INTEGER NOT NULL,
  CONSTRAINT fk_sporttype FOREIGN KEY (SportTypeID) REFERENCES SportTypes(SportTypeID))




То есть, на всякий случай, еще раз: мне нужно в селекте вывести спортсмена, другого спортсмена и еще одного.
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593053
Xup0,

во-первых, судя по приведенной таблице - в ней нет поля, отвечающего за успехи спортсмена
во-вторых, тебе, судя по описанию задачи, нужен не столбец в двух экземплярах, а таблица с рейтингами. Тут читать про джойны и алиасы на источники данных.
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593060
Xup0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх, я просто подумал, что будет нецелесообразно кидать всю бд: помимо этого есть еще 3 таблицы, которые и определяют их успехи. Понятно, что их надо джойнить, но как после этого переиспользовать столбцы? (сделать 2 разных экземпляра одного столбца независимыми)
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593061
Xup0,

когда тебе в больнице выписывают анализ крови, ты тоже вместо этого кал приносишь?
публиковать нужно то, с чем проблема. а не то, что ты посчитал целесообразным.
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593073
Xup0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх,

Код: 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.
26.
27.
28.
--Таблицы: 

CREATE TABLE SportTypes( 
  SportTypeID INTEGER NOT NULL PRIMARY KEY, 
  SportTypeName VARCHAR(30));

CREATE TABLE Sportsmans(  
  SportsmanID INTEGER NOT NULL PRIMARY KEY,  
  FirstName VARCHAR(50) NOT NULL, 
  MiddleName VARCHAR(50),  
  LastName VARCHAR(50) NOT NULL,  
  SportTypeID INTEGER NOT NULL, 
  CONSTRAINT fk_sporttype FOREIGN KEY (SportTypeID) REFERENCES SportTypes(SportTypeID));

CREATE TABLE Competitions(   
  CompetitionID INTEGER NOT NULL PRIMARY KEY,   
  CompetitionName VARCHAR(50) NOT NULL,   
  Season VARCHAR(30) NOT NULL,   
  SportTypeID INTEGER NOT NULL,   
  CONSTRAINT fk_sporttype2 FOREIGN KEY (SportTypeID) REFERENCES SportTypes(SportTypeID));

CREATE TABLE Results(   
  SportsmanID INTEGER NOT NULL,   
  CompetitionID INTEGER NOT NULL,   
  Result INTEGER NOT NULL,   
  CONSTRAINT fk_sportsman FOREIGN KEY (SportsmanID) REFERENCES Sportsmans(SportsmanID), 
  CONSTRAINT fk_competition FOREIGN KEY (CompetitionID) REFERENCES Competitions(CompetitionID), 
  CONSTRAINT pk_results PRIMARY KEY (SportsmanID, CompetitionID));
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593074
Xup0,

покажи, как получаешь лучшего / худшего спортсмена в каждом виде спорта...
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593080
Xup0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх, Запрос не дописан, потому что я уткнулся в эту проблема, но идея была такая:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select "ID", sp1.FirstName, sp1.LastName, sp1.MiddleName, "sID", min(avgRes) over (partition by SportTypeName) as BestRes from
(select sp1.SportsmanID as "ID", sp1.FirstName, sp1.LastName, sp1.MiddleName, sp1.SportTypeID as "sID", SportTypeName, avg(Result) over (partition by sp1.SportsmanID, Competitions.SportTypeID) as avgRes
from
Sportsmans sp1 inner join Results on sp1.SportsmanID = Results.SportsmanID
           inner join Competitions on Results.CompetitionID = Competitions.CompetitionID
           inner join SportTypes on SportTypes.SportTypeID = Competitions.SportTypeID
           inner join Sportsmans sp2 on sp2.SportsmanID = Results.SportsmanID);



тут мы получим лучший результат, дальше я хотел сделать что-то наподобие where avgRes = BestRes, но не знаю, как добавить еще независимых атрибутов спортсменов. Подумал, что можно просто по разному назвать таблицы и заджойнить (отсюда sp1 и sp2), но не тут-то было
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593081
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xup0Вывести всех спортсменов (все атрибуты спортсмена) + лучший спортсмен в его виде спорта + худший спортсмен в его виде спорта.Множество ВСЕХ включает и лучшего с худшим.
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593085
Xup0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, ну, задание - есть задание. По нему нам нужно получить таблицу, в которой будут сначала столбцы атрибутов спортсменов (каждая строка - новый спортсмен) а потом айди худшего спортсмена в виде спорта спортсмена, порождающего строку, и лучшего. Как то так
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593097
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xup0,
Добавь max(avgRes) в свою выборку
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select "ID",
       sp1.FirstName,
       sp1.LastName,
       sp1.MiddleName,
       "sID",
       min(avgRes) over(partition by SportTypeName) as BestRes,
       max(avgRes) over(partition by SportTypeName) as WorstRes
  from ...
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593113
Xup0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
шК0ДЕР,

Это то все понятно, я не понимаю, как получить вместо худшего и лучшего результата данные спортсмена, которому эти результаты принадлежат.
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593115
AnSi_Sr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
min/max/avg... (без разницы) + dense_rank first/last functions
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593352
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xup0-2-, ну, задание - есть задание. По нему нам нужно получить таблицу, в которой будут сначала столбцы атрибутов спортсменов (каждая строка - новый спортсмен) а потом айди худшего спортсмена в виде спорта спортсмена, порождающего строку, и лучшего. Как то так
Не нужно ничего придумывать от себя. Вам уже ответили:
-2-Множество ВСЕХ включает и лучшего с худшим.
И в более грубой форме:
Добрый Э - Эхкогда тебе в больнице выписывают анализ крови, ты тоже вместо этого кал приносишь?
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593411
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xup0

Вывести всех сотрудников + самого богатого в его отделе + самый бедный в отделе

Код: 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.
26.
27.
  1  SELECT deptno,ename,empno,sal,
  2     max(ename) KEEP (DENSE_RANK FIRST ORDER BY sal)
  3        OVER (PARTITION BY deptno ) "Worst",
  4     max(ename) KEEP (DENSE_RANK LAST ORDER BY sal)
  5        OVER (PARTITION BY deptno) "Best"
  6      FROM emp
  7*     ORDER BY deptno, sal,ename
SQL> /

    DEPTNO ENAME           EMPNO        SAL Worst      Best
---------- ---------- ---------- ---------- ---------- ----------
        10 MILLER           7934       1300 MILLER     KING
        10 CLARK            7782       2450 MILLER     KING
        10 KING             7839       5000 MILLER     KING
        20 SMITH            7369        800 SMITH      SCOTT
        20 ADAMS            7876       1100 SMITH      SCOTT
        20 JONES            7566       2975 SMITH      SCOTT
        20 FORD             7902       3000 SMITH      SCOTT
        20 SCOTT            7788       3000 SMITH      SCOTT
        30 JAMES            7900        950 JAMES      BLAKE
        30 MARTIN           7654       1250 JAMES      BLAKE
        30 WARD             7521       1250 JAMES      BLAKE
        30 TURNER           7844       1500 JAMES      BLAKE
        30 ALLEN            7499       1600 JAMES      BLAKE
        30 BLAKE            7698       2850 JAMES      BLAKE

14 rows selected.



.....
stax
...
Рейтинг: 0 / 0
Использование двух экземпляров одного столбца
    #39593413
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

ой, надбавку не учел
Код: 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.
26.
27.
28.
29.
30.
SQL> ed
Wrote file afiedt.buf

  1  SELECT deptno,ename,empno,sal,comm,
  2     max(ename) KEEP (DENSE_RANK FIRST ORDER BY sal+nvl(comm,0))
  3        OVER (PARTITION BY deptno ) "Worst",
  4     max(ename) KEEP (DENSE_RANK LAST ORDER BY sal+nvl(comm,0))
  5        OVER (PARTITION BY deptno) "Best"
  6      FROM emp
  7*     ORDER BY deptno, sal,ename
SQL> /

    DEPTNO ENAME           EMPNO        SAL       COMM Worst      Best
---------- ---------- ---------- ---------- ---------- ---------- ----------
        10 MILLER           7934       1300            MILLER     KING
        10 CLARK            7782       2450            MILLER     KING
        10 KING             7839       5000            MILLER     KING
        20 SMITH            7369        800            SMITH      SCOTT
        20 ADAMS            7876       1100            SMITH      SCOTT
        20 JONES            7566       2975            SMITH      SCOTT
        20 FORD             7902       3000            SMITH      SCOTT
        20 SCOTT            7788       3000            SMITH      SCOTT
        30 JAMES            7900        950            JAMES      BLAKE
        30 MARTIN           7654       1250       1400 JAMES      BLAKE
        30 WARD             7521       1250        500 JAMES      BLAKE
        30 TURNER           7844       1500            JAMES      BLAKE
        30 ALLEN            7499       1600        300 JAMES      BLAKE
        30 BLAKE            7698       2850            JAMES      BLAKE

14 rows selected.



.....
stax
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Использование двух экземпляров одного столбца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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