首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL排序依据字段加字段

MySQL排序依据字段加字段
EN

Stack Overflow用户
提问于 2012-02-08 20:26:58
回答 4查看 1.2K关注 0票数 0

我有一张桌子

代码语言:javascript
运行
复制
id   type       left    right 
1    featured   1       2 
2    default    3       1 
3    default    5       2 
4    default    2       7 
5    featured   3       4 
6    featured   3       2 
7    day        1       3
8    default    12      42

我需要输出五个id中的type != day,并按sum(left + right)排序,按featured,default排序

首先,与type = dafule ordering by sum(left + right) LIMIT 5相比,需要所有特性类型的ORDERING by sum(left + right)

我想得到的是:

代码语言:javascript
运行
复制
5, 6, 1, 8, 4

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-08 20:32:49

按“特色”排序首先出现的是order by中的IF() ...如果类型是" featured ",则使用1作为排序基础,否则使用2。因为您只有featured和default可用(限制"day“条目)。否则,它将被更改为CASE/WHEN构造,以说明其他类型

代码语言:javascript
运行
复制
select
      yt.id,
      yt.type,
      yt.left + yt.right as LeftPlusRight
   from 
      YourTable yt
   where
      yt.type <> 'day'
   order by
      if( yt.type = 'featured', 1, 2 ),
      LeftPlusRight  DESC
   limit 5
票数 2
EN

Stack Overflow用户

发布于 2012-02-08 20:50:47

得到了预期的结果:

5、6、1、8、4

实际上,您希望按type desc排序id,然后按sum of leftright desc排序,因此以下查询可能满足您的需要:

代码语言:javascript
运行
复制
SELECT
    id
FROM
    tlr
WHERE
    `type`!='day'
ORDER BY 
    `type` DESC, `left`+`right` DESC
LIMIT 5;

它是这样工作的:

代码语言:javascript
运行
复制
mysql [localhost] {msandbox} (test) > select * from tlr;
+----+----------+------+-------+
| id | type     | left | right |
+----+----------+------+-------+
|  1 | featured |    1 |     2 |
|  2 | default  |    3 |     1 |
|  3 | default  |    5 |     2 |
|  4 | default  |    2 |     7 |
|  5 | featured |    3 |     4 |
|  6 | featured |    3 |     2 |
|  7 | day      |    1 |     3 |
|  8 | default  |   12 |    42 |
+----+----------+------+-------+
8 rows in set (0.00 sec)

mysql [localhost] {msandbox} (test) > select id from tlr where `type`!='day' order by type desc, `left`+`right` desc limit 5;
+----+
| id |
+----+
|  5 |
|  6 |
|  1 |
|  8 |
|  4 |
+----+
5 rows in set (0.00 sec)
票数 1
EN

Stack Overflow用户

发布于 2012-02-08 20:32:00

代码语言:javascript
运行
复制
select id
from your_table
where `type` != 'day'
order by `type`, sum(left + right)
group by `type`    
limit 5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9193290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档