我有一个包含4列的表格:
id | m_id | name | value
--------------------
1 | 1 | bed | 3
3 | 1 | bath | 3
2 | 2 | bed | 4
3 | 2 | bath | 2
我想使用value
订购结果并按顺序保留m_id
。
如果我从bed DESC
列的name
订购,结果应如下所示:
id | m_id | name | value
--------------------
2 | 2 | bed | 4
3 | 2 | bath | 2
1 | 1 | bed | 3
3 | 1 | bath | 3
如果我从bath DESC
列的name
订购,结果应如下所示:
id | m_id | name | value
--------------------
1 | 1 | bed | 3
3 | 1 | bath | 3
2 | 2 | bed | 4
3 | 2 | bath | 2
无论name
订单是否发生变化,我都只关心m_id
按顺序排列。
有什么想法吗?
答案 0 :(得分:0)
您可以在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;
答案 1 :(得分:0)
这只是一个疯狂的猜测,因为我无法100%真正理解你的问题。我想你想重新调整行值,以便对每列进行排序,对吗?你想要这样的东西吗?
id | m_id | name | value
--------------------
1 | 1 | bath | 2
2 | 1 | bath | 3
3 | 2 | bed | 3
3 | 2 | bed | 4
每个列都已排序,但行不再有任何意义。
如果是这样,我必须告诉你SQL不能以任何简单的方式做到这一点。使用SQL从表中获取数据会更好,然后使用自定义编程语言重新排列它。
答案 2 :(得分:0)
在您的查询中尝试以下order by子句。 通过解码订单(名称,'床',1,'浴室',2),m_id
根据您的需要设置asc,desc。