首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对每个case-when语句进行排序

对每个case-when语句进行排序
EN

Stack Overflow用户
提问于 2020-05-06 10:14:36
回答 3查看 24关注 0票数 1

这是我的用户数据库:

代码语言:javascript
复制
id | sex    | trending | date_registered
---+--------+----------+----------------
1  | male   | 1        | 29-04-2020
2  | male   | 1        | 28-04-2020
3  | male   | 0        | 27-04-2020
4  | female | 1        | 26-04-2020
5  | female | 1        | 25-04-2020
6  | female | 0        | 24-04-2020
7  | female | 0        | 23-04-2020
8  | male   | 1        | 22-04-2020
9  | male   | 0        | 21-04-2020

我使用以下查询来返回:

(1)潮流女性

(2)其余女性

(3)流行男性

(4)其余男性

代码语言:javascript
复制
select
    id,
    sex,
    trending,
    date_registered
from users
order by
    case
        when sex = 'female' and trending = 1 then 1
        when sex = 'female' and trending = 0 then 2
        when sex = 'male' and trending = 1 then 3
        when sex = 'male' and trending = 0 then 4
    end 

here is the demo

最重要的是,对于每个case-when语句,我希望首先按最近的用户进行排序。

例如,when sex = 'female' and trending = 1 then 1返回一个ASC排序,因此最老的用户将首先显示。

当我尝试对case进行DESC排序时,像bellow这样的语句不会改变任何事情:

代码语言:javascript
复制
order by
(CASE when sex = 'female' and trending = 1 then 1 END) DESC,
(CASE when sex = 'female' and trending = 0 then 2 END) DESC,
(CASE when sex = 'male' and trending = 1 then 3 END) DESC,
(CASE when sex = 'male' and trending = 0 then 4 END) DESC
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-06 10:31:04

根据您的需求,您需要按sex升序(女性在前)、trending降序(趋势用户在前)和date_registered降序(最近用户在前)进行排序:

代码语言:javascript
复制
select
    id,
    sex,
    trending,
    date_registered
from users
order by sex, trending desc, date_registered desc

小提琴的输出:

代码语言:javascript
复制
id  sex     trending    date_registered
4   female  1           26-04-2020
5   female  1           25-04-2020
6   female  0           24-04-2020
7   female  0           23-04-2020
1   male    1           29-04-2020
2   male    1           28-04-2020
8   male    1           22-04-2020
3   male    0           27-04-2020
9   male    0           21-04-2020

Updated demo

票数 2
EN

Stack Overflow用户

发布于 2020-05-06 10:18:10

我认为你可以这样写:

代码语言:javascript
复制
order by sex, trending desc

Here是您的db<>fiddle。

票数 0
EN

Stack Overflow用户

发布于 2020-05-06 10:28:37

仅将DESC放在CASE块之后( END关键字之后):

代码语言:javascript
复制
select
    id,
    sex,
    trending,
    date_registered
from users
order by
    case
        when sex = 'female' and trending = 1 then 1
        when sex = 'female' and trending = 0 then 2
        when sex = 'male' and trending = 1 then 3
        when sex = 'male' and trending = 0 then 4
    end DESC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61626222

复制
相关文章

相似问题

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