SQL-запрос для объединения 3 таблиц, в результате упорядоченный и отсортированный список - PullRequest
0 голосов
/ 27 июня 2018

Как я могу написать запрос для объединения 3 таблиц, получая упорядоченный и отсортированный список?

У меня есть 3 таблицы со следующей структурой:

Таблица пользователей:

|---------------------------|
|           Users           |
|---------------------------|
|      ID     |     Name    |
|-------------|-------------|
|      1      |     John    |
|-------------|-------------|
|      2      |     David   |
|-------------|-------------|
|      3      |     James   |
|-------------|-------------|
|      4      |     Jack    |
|-------------|-------------|

Настольные вопросы:

|-------------------------------------------------------|
|                    Questions                          |
|-------------------------------------------------------|
|   ID  |     Question                                  |
|-------|-----------------------------------------------|
|   1   |     How old are you working in this company?  |
|-------|-----------------------------------------------|
|   2   |     How many customers do you notice?         |
|-------|-----------------------------------------------|
|   3   |     What is your salary?                      |
|-------|-----------------------------------------------|
|   4   |     Do you speak another language?            |
|-------|-----------------------------------------------|

Таблица ответов

|----------------------------------------|
|                  Replies               |
|----------------------------------------|
|  ID | USER ID | QUESTION ID |   Reply  |
|-----|---------|-------------|----------|
|  1  |    1    |      1      |    10    |
|-----|---------|-------------|----------|
|  2  |    1    |      2      |    30    |
|-----|---------|-------------|----------|
|  3  |    1    |      3      |    3000  |
|-----|---------|-------------|----------|
|  4  |    1    |      4      |    yes   |
|-----|---------|-------------|----------|
|  5  |    2    |      1      |    7     |
|-----|---------|-------------|----------|
|  6  |    2    |      2      |    25    |
|-----|---------|-------------|----------|
|  7  |    2    |      3      |    1500  |
|-----|---------|-------------|----------|
|  8  |    2    |      4      |    no    |
|-----|---------|-------------|----------|
|  9  |    3    |      1      |    5     |
|-----|---------|-------------|----------|
|  10 |    3    |      2      |    50    |
|-----|---------|-------------|----------|
|  11 |    3    |      3      |    2000  |
|-----|---------|-------------|----------|
|  12 |    3    |      4      |    yes   |
|-----|---------|-------------|----------|
|  13 |    4    |      1      |    7     |
|-----|---------|-------------|----------|
|  14 |    4    |      2      |    40    |
|-----|---------|-------------|----------|
|  15 |    4    |      3      |    2000  |
|-----|---------|-------------|----------|
|  16 |    4    |      4      |    yes   |
|-----|---------|-------------|----------|

Мне нужно написать SQL-запрос для фильтрации и сортировки этих результатов. Почти как Excel.

Пример: Мне нужно выбрать, кто говорит на другом языке, кто обслуживает от 5 до 100 клиентов, заказывая на уменьшающуюся зарплату и годы в убывающей компании.

Это должно получиться так:

|--------------------------------------------------------------------|
|                            Result                                  |
|--------------------------------------------------------------------|
| ORDER |  NAME  | QUESTION 1 | QUESTION 2 | QUESTION 3 | QUESTION 4 |
|-------|--------|------------|------------|------------|------------|
|   1   |  John  |     10     |     30     |    3000    |     Yes    |
|-------|--------|------------|------------|------------|------------|
|   2   |  Jack  |     7      |     40     |    2000    |     Yes    |
|-------|--------|------------|------------|------------|------------|
|   3   |  James |     5      |     50     |    2000    |     Yes    |
|-------|--------|------------|------------|------------|------------|

Есть предложения?

Спасибо

1 Ответ

0 голосов
/ 27 июня 2018

У JOIN с условная агрегация:

select u.user_id, u.name,
       max(case when r.QUESTIONID = 1 then r.reply) as QUESTION1,
       max(case when r.QUESTIONID = 2 then r.reply) as QUESTION2,
       max(case when r.QUESTIONID = 3 then r.reply) as QUESTION3,
       max(case when r.QUESTIONID = 4 then r.reply) as QUESTION4
from Replies r inner join 
     Users u
     on u.user_id = r.user_id
group by u.user_id, u.name;

РЕДАКТИРОВАТЬ:

select t.*
from ( <query> ) t
where . . .;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...