这个看似简单的订单要求似乎没有简单的解决方案。
我希望一个表由具有最高最大值的项目排序,然后按降序排列相同项目的其余部分。然后是具有下一个最高最大值的项目,然后是降序的相同项目的其余部分..等等
例如,我需要订购一个类似这样的表:
item value
AAA 2
AAA 4
AAA 2
CCC 8
BBB 1
BBB 2
BBB 6
CCC 4
要像这样订购..
item value
CCC 8
CCC 4
BBB 6
BBB 2
BBB 1
AAA 4
AAA 2
AAA 2
有谁知道怎么做?
答案 0 :(得分:3)
这是你似乎在寻找的东西:
select item, value
from tablename
order by item desc, value desc
以下是一个工作示例:http://sqlfiddle.com/#!9/e56d7/1
答案 1 :(得分:1)
select item, value from yourtable order by item desc, value desc;
答案 2 :(得分:0)
这是一种方式:SQL Fiddle
MySQL 5.6架构设置:
CREATE TABLE Table1
(`item` varchar(3), `value` int)
;
INSERT INTO Table1
(`item`, `value`)
VALUES
('AAA', 2),
('AAA', 4),
('AAA', 2),
('CCC', 8),
('BBB', 1),
('BBB', 2),
('BBB', 6),
('CCC', 4)
;
查询1 :
select
t1.*
from (
select item, max(value) mval from table1 group by item
) m1
inner join table1 t1 on m1.item = t1.item
order by
m1.mval DESC
, t1.item
, t1.value DESC
<强> Results 强>:
| item | value |
|------|-------|
| CCC | 8 |
| CCC | 4 |
| BBB | 6 |
| BBB | 2 |
| BBB | 1 |
| AAA | 4 |
| AAA | 2 |
| AAA | 2 |
回应下面有价值的评论: 这是此方法允许的另一种选择(nb:案例&#39; DDD&#39;已添加)
MySQL 5.6架构设置:
CREATE TABLE Table1
(`item` varchar(3), `value` int)
;
INSERT INTO Table1
(`item`, `value`)
VALUES
('DDD', 8),
('DDD', 8),
('AAA', 2),
('AAA', 4),
('AAA', 2),
('CCC', 8),
('BBB', 1),
('BBB', 2),
('BBB', 6),
('CCC', 4)
;
查询1 :
select
t1.*
from (
select item, max(value) mval , sum(value) sval
from table1 group by item
) m1
inner join table1 t1 on m1.item = t1.item
order by
m1.mval DESC
, m1.sval DESC
, t1.item
, t1.value DESC
<强> Results 强>:
| item | value |
|------|-------|
| DDD | 8 |
| DDD | 8 |
| CCC | 8 |
| CCC | 4 |
| BBB | 6 |
| BBB | 2 |
| BBB | 1 |
| AAA | 4 |
| AAA | 2 |
| AAA | 2 |