仅从1行选择和订购

时间:2019-03-02 14:31:48

标签: mysql

我的数据库中有一张约50列的表格。现在,我想写一个Select to order date from 1 row。

示例表:

ID | foo1   |  f1_rank |  foo2    |  f2_rank | foo3    | f3_rank
----------------------------------------------------------------
1  | bar1   |  3       |  bar2    |  1       | bar3    | 2
2  | babar1 |  1       |  barbar2 |  3       | barbar3 | 2

select应该根据“ f * _rank”对foo1,foo2和foo3 cols进行排序, 像这样:

For ID1:
bar2
bar3
bar1

对于ID2:barbar1,barbar3,barbar2

我不知道该怎么做到。是交错某些选择语句的正确方法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

mysql无法按行排序,但您可以先取消透视/条件聚合

select id,
         max(case when rnk = 1 then foo else null end) foo1,
         max(case when rnk = 2 then foo else null end) foo2,
         max(case when rnk = 3 then foo else null end) foo3
from
(
select id, foo1 foo,f1_rank rnk from t
union all
select id, foo2,f2_rank from t
union all
select id, foo3,f3_rank from t
) s
group by id;

+------+--------+---------+---------+
| id   | foo1   | foo2    | foo3    |
+------+--------+---------+---------+
|    1 | bar2   | bar3    | bar1    |
|    2 | babar1 | barbar3 | barbar2 |
+------+--------+---------+---------+
2 rows in set (0.00 sec)

对于50列来说,这会有些烦人。