如何按列值排序垂直 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;
当然,这可以更传统地使用 join
和 group 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。
我有一个有 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;
当然,这可以更传统地使用 join
和 group 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。