【问题标题】:Why did we use case 0 and 1?为什么我们使用案例 0 和 1?
【发布时间】:2018-07-09 18:54:36
【问题描述】:

编写一个 SQL 查询,按照主题和获奖者姓名的顺序查找 1970 年获奖者的所有详细信息;但列表最后包含了经济学和化学这门学科。

YEAR SUBJECT                   WINNER                                        COUNTRY                CATEGORY
---- ------------------------- --------------------------------------------- ------------------------- ------------
1970 Physics                   Hannes Alfven                                 Sweden                 Scientist
1970 Physics                   Louis Neel                                    France                 Scientist
1970 Chemistry                 Luis Federico Leloir                          France                 Scientist
1970 Physiology                Ulf von Euler                                 Sweden                 Scientist
1970 Physiology                Bernard Katz                                  Germany                Scientist
1970 Literature                Aleksandr Solzhenitsyn                        Russia                 Linguist
1970 Economics                 Paul Samuelson                                USA                    Economist
1970 Physiology                Julius Axelrod                                USA                    Scientist
1971 Physics                   Dennis Gabor                                  Hungary                Scientist
1971 Chemistry                 Gerhard Herzberg                              Germany                Scientist
1971 Peace                     Willy Brandt                                  Germany                Chancellor
1971 Literature                Pablo Neruda                                  Chile                  Linguist
1971 Economics                 Simon Kuznets                                 Russia                 Economist
1978 Peace                     Anwar al-Sadat                                Egypt                  President
1978 Peace                     Menachem Begin                                Israel                 Prime Minister
1987 Chemistry                 Donald J. Cram                                USA                    Scientist
1987 Chemistry                 Jean-Marie Lehn                               France                 Scientist
1987 Physiology                Susumu Tonegawa                               Japan                  Scientist
1994 Economics                 Reinhard Selten                               Germany                Economist
1994 Peace                     Yitzhak Rabin                                 Israel                 Prime Minister
1987 Physics                   Johannes Georg Bednorz                        Germany                Scientist
1987 Literature                Joseph Brodsky                                Russia                 Linguist
1987 Economics                 Robert Solow                                  USA                    Economist
1994 Literature                Kenzaburo Oe                                  Japan                  Linguist

答案:

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

有人可以解释该答案中的caseorder by 逻辑吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    要求说经济学和化学必须排在最后。所以我们必须使用ORDER BY来控制结果的顺序。

    subject IN ('Economics','Chemistry') 为真时,CASE 表达式返回1。否则为0。由于0 低于1,并且我们按升序排序,因此0 所在的行将排在最前面。

    【讨论】:

      【解决方案2】:

      如果主题是特殊主题之一,case 表达式返回 1,否则返回 0。由于升序排序,结果集中的 0 在 1 之前。所以,经济学和化学毕竟是其他学科。

      MySQL 对此有一个方便的简写,因为布尔值在数字上下文中被视为数字。所以做同样事情的更短的表达式是:

      ORDER BY ( subject IN ('Economics', 'Chemistry') ) ASC,
               subject, winner
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-03
        • 1970-01-01
        相关资源
        最近更新 更多