Skip to content

Commit 9e53754

Browse files
committed
task 23
1 parent 29f64dc commit 9e53754

4 files changed

Lines changed: 94 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
20. Заработная плата сотрудников - [Employee Salaries](./tasks/20.md)
4747
21. Тип треугольника - [Type of Triangle](./tasks/21.md)
4848
22. ПОДУШКИ - [The PADS](./tasks/22.md)
49+
23. Профессии - [Occupations](./tasks/23.md)
4950

5051

5152
## В процессе... , будет дополнено)

tasks/23.md

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,90 @@
1-
###
1+
### Профессии - [Occupations]
22

33
<img src="./art/23.png" alt="solution" >
44

55
#### eng:
6+
Pivot the Occupation column in OCCUPATIONS so that each Name is sorted alphabetically and displayed underneath its
7+
corresponding Occupation. The output column headers should be Doctor, Professor, Singer, and Actor, respectively.
68

9+
Note: Print NULL when there are no more names corresponding to an occupation.
10+
11+
Input Format
12+
13+
The OCCUPATIONS table is described as follows:
14+
Occupation will only contain one of the following values: Doctor, Professor, Singer or Actor.
715

816

917
#### рус:
18+
Поверните столбец «Профессия» в «ОККУПАЦИИ», чтобы каждое имя было отсортировано в
19+
алфавитном порядке и отображалось под соответствующей профессией.
20+
Заголовки выходных столбцов должны быть «Доктор», «Профессор», «Певец» и «Актер»
21+
соответственно.
22+
23+
Примечание. Выведите NULL, если больше нет имен, соответствующих роду занятий.
1024

25+
Формат ввода
26+
27+
Таблица OCCUPATIONS описывается следующим образом:
28+
Род занятий будет содержать только одно из следующих значений: Доктор, Профессор, Певец
29+
или Актер.
1130

1231

1332
#### код с коментариями:
1433
```sql
15-
34+
-- Итак нам нужно будет создать таблицу из 4-х столбцов доктор, профессор, певец,
35+
-- обобщенное табличное выражение
36+
WITH temp AS ( /* создать временную таблицу */
37+
SELECT /* выбрать данные */
38+
CASE /* в случае */
39+
WHEN occupation='doctor' THEN name /* когда занятие доктор имя внести в столбец доктор */
40+
END AS doctor,
41+
CASE /* в случае */
42+
WHEN occupation='professor' THEN name /* когда занятие профессор имя внести в столбец профессор */
43+
END AS professor,
44+
CASE /* в случае */
45+
WHEN occupation='singer' THEN name /* когда занятие певец имя внести в столбец певец */
46+
END AS singer,
47+
CASE /* в случае */
48+
WHEN occupation='actor' THEN name /* когда занятие актер имя внести в столбец актер */
49+
END AS actor,
50+
row_number() over /* нумерует строки, возвращаемые запросом */
51+
(partition by occupation /* разделить по занятию */
52+
ORDER BY name) as ran /* отсортировать по имени */
53+
FROM occupations) /* из таблицы занятие */
54+
SELECT /* выбрать данные */
55+
min(doctor), /* выбрать минимальные данные столбца */
56+
min(professor), /* выбрать минимальные данные столбца */
57+
min(singer), /* выбрать минимальные данные столбца */
58+
min(actor) /* выбрать минимальные данные столбца */
59+
FROM temp /* из временной таблицы */
60+
GROUP BY ran /* сгруппировать по столбцу номер по порядку */
1661
```
1762

1863
#### код для hackerrank:
1964
```sql
20-
65+
WITH temp AS (
66+
SELECT
67+
CASE
68+
WHEN occupation='doctor' THEN name
69+
END AS doctor,
70+
CASE
71+
WHEN occupation='professor' THEN name
72+
END AS professor,
73+
CASE
74+
WHEN occupation='singer' THEN name
75+
END AS singer,
76+
CASE
77+
WHEN occupation='actor' THEN name
78+
END AS actor,
79+
row_number() over (partition by occupation ORDER BY name) as ran
80+
FROM occupations)
81+
SELECT
82+
min(doctor),
83+
min(professor),
84+
min(singer),
85+
min(actor)
86+
FROM temp
87+
GROUP BY ran
2188
```
2289

2390

tasks/23.sql

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
WITH temp AS (
2+
SELECT
3+
CASE
4+
WHEN occupation='doctor' THEN name
5+
END AS doctor,
6+
CASE
7+
WHEN occupation='professor' THEN name
8+
END AS professor,
9+
CASE
10+
WHEN occupation='singer' THEN name
11+
END AS singer,
12+
CASE
13+
WHEN occupation='actor' THEN name
14+
END AS actor,
15+
row_number() over (partition by occupation ORDER BY name) as ran
16+
FROM occupations)
17+
SELECT
18+
min(doctor),
19+
min(professor),
20+
min(singer),
21+
min(actor)
22+
FROM temp
23+
GROUP BY ran

tasks/art/23.png

34.1 KB
Loading

0 commit comments

Comments
 (0)