SQL查询联接3个表,产生一个有序和排序的列表

时间:2018-06-27 12:56:57

标签: mysql sql

如何编写查询以联接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 :(得分:1)

使用有条件的聚合来执行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 . . .;