按案例订购有条件的背景工作

时间:2017-06-03 16:25:36

标签: sql database

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

编写一个SQL查询,按订购主题和获胜者名称查找1970年获奖者的所有详细信息;但该列表最后包含了经济学和化学学科。

以下是上述问题的解决方案。但我无法理解下面的解决方案。我上网寻找ORDER BY子句的理解,但无法找到明确的解释。我无法理解当我们分配' 1'或者' 0' 0为什么我们这样做我想知道执行此查询时实际发生了什么。

SELECT *
    FROM nobel_win
    WHERE year=1970 
    ORDER BY
     CASE
        WHEN subject IN ('Economics','Chemistry') THEN 1
        ELSE 0
     END ASC,
     subject,
     winner;

2 个答案:

答案 0 :(得分:2)

您的第一个订单条件是

 CASE
    WHEN subject IN ('Economics','Chemistry') THEN 1
    ELSE 0
 END ASC

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

所有记录subject IN ('Economics','Chemistry')获取订单结果1以及所有其他订单结果0。然后这得到了ASC(升序) - 所以“0” - 记录首先出现,“1” - 记录第二。

您可以在case声明中使用任何其他数字。 232093。它只是一个先行的指标。

在MySQL中,布尔条件的结果自动计算为10。所以在MySQL中你可以将其减少到

order by subject IN ('Economics','Chemistry'),
         subject,
         winner;

答案 1 :(得分:0)

这基本上就像

ORDER BY CASE (),
         SUBJECT,
         WINNER;

首先,此语句将根据 CASE 值进行排序,然后是 主题,最后是 获胜者

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