首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逐案命令有条件的背景工作

问逐案命令有条件的背景工作
EN

Stack Overflow用户
提问于 2017-06-03 16:25:35
回答 2查看 729关注 0票数 0

当我遇到这个问题时,我正在网上练习SQL查询:

写一个SQL查询,找出1970年获奖者的所有细节,按“主题”和“获奖者”的名字命名,但列表中最后包含“学科经济学和化学”。

以下是上述问题的解决方案。但我无法理解下面的解决方案。我在网上冲浪,想找出对逐条订货的理解,但却找不到明确的解释。我不明白当我们分配'1‘或'0’时会发生什么,以及为什么我们要这样做。我想知道在执行这个查询时实际发生了什么。

代码语言:javascript
复制
SELECT *
    FROM nobel_win
    WHERE year=1970 
    ORDER BY
     CASE
        WHEN subject IN ('Economics','Chemistry') THEN 1
        ELSE 0
     END ASC,
     subject,
     winner;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-03 16:33:55

您的第一阶条件是

代码语言:javascript
复制
 CASE
    WHEN subject IN ('Economics','Chemistry') THEN 1
    ELSE 0
 END ASC

这首先根据该条件对完整的结果集进行排序。

因此,所有subject IN ('Economics','Chemistry')获取订单结果1和其他所有订单结果0的记录。然后得到有序的ASC (升序)-所以"0"-records优先,"1"-records次之。

您可以使用case语句中的任何其他数字。2和3或20和93。它只是一个先行的指标。

在MySQL中,布尔条件的结果自动计算为1和0。所以在MySQL中,你可以把它减少到

代码语言:javascript
复制
order by subject IN ('Economics','Chemistry'),
         subject,
         winner;
票数 2
EN

Stack Overflow用户

发布于 2021-03-16 07:18:55

这基本上就像

代码语言:javascript
复制
ORDER BY CASE (),
         SUBJECT,
         WINNER;

首先,这个语句将根据大小写值进行排序,然后是subject,最后是winner。

如果科目的值不是经济学或化学,则为0,否则它将为1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44346112

复制
相关文章

相似问题

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