如何按列值排序垂直 table?

How to order a vertical table by column value?

我有一个有 4 列的 table:

id | m_id | name | value
--------------------
 1 | 1    | bed  |   3
 3 | 1    | bath |   3
 2 | 2    | bed  |   4
 3 | 2    | bath |   2

我想使用 value 对结果进行排序并保持 m_id 的顺序。

如果我从 name 列按 bed DESC 排序,结果应该如下所示:

id | m_id | name | value
--------------------
 2 | 2    | bed  |   4
 3 | 2    | bath |   2
 1 | 1    | bed  |   3
 3 | 1    | bath |   3

如果我从 name 列按 bath DESC 排序,结果应该如下所示:

id | m_id | name | value
--------------------
 1 | 1    | bed  |   3
 3 | 1    | bath |   3
 2 | 2    | bed  |   4
 3 | 2    | bath |   2

无论name顺序是否改变,我只关心m_id保持顺序。

有什么想法吗?

您可以在 order by 中使用子查询。这有点酷:

select t.*
from t
order by (select max(t2.value) from t t2 where t2.m_id = t.m_id) desc, m_id;

当然,这可以更传统地使用 joingroup by:

select t.*
from t join
     (select t2.m_id, max(t2.value) as max_value
      from t t2
      group by t2.m_id
     ) t2
     on t.m_id = t2.m_id
order by t2.max_value desc, m_id;

这只是一个大胆的猜测,因为我无法 100% 真正理解您的问题。我想你想要 re-shuffle 行值以便对每一列进行排序,对吗?你想要这样的东西吗?

id | m_id | name | value
--------------------
 1 | 1    | bath |   2
 2 | 1    | bath |   3
 3 | 2    | bed  |   3
 3 | 2    | bed  |   4

每列都已排序,但行不再有任何意义。

如果是这样,我必须通知您 SQL 无法以任何简单的方式做到这一点。您最好使用 SQL 从 table 获取数据,然后使用自定义编程语言根据需要重新排列数据。

在您的查询中按以下顺序试试这个。 按解码排序(name,'bed',1,'bath',2), m_id

根据需要设置 asc,desc。