如何在特定序列中列出mysql查询结果?
问题描述:
问题#14 SQLZoo 为表 诺贝尔(年,主题,获奖者) 竟把 “显示1984年的获奖者和主题主题和获奖者的名字排列,但名单化学与物理最后一次。”如何在特定序列中列出mysql查询结果?
我的解决办法是
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject,winner
但它不会在最后列出化学和物理。 有没有办法做到这一点? 以及如何按特定顺序排序字段?
答
使用可以使用CASE
:
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY
CASE
WHEN subject IN ('Physics','Chemistry') THEN 1
ELSE 0
END ASC,
subject,
winner
编辑:
这是初级相同Gordon Linoff Solution,但是如果使用多个规则需要被扩展到另一对象。 IN
只允许2种方式:false/true。
ORDER BY
CASE
WHEN subject IN ('Physics','Chemistry') THEN 2
WHEN subject IN ('Medicine','Literature') THEN 1
ELSE 0
END ASC,
subject,
winner
答
您可以将其他密钥添加到order by
。对于此特定目的:
order by (subject in ('Chemistry', 'Physics')),
subject, winner
第一个条件是一个布尔表达式,其值为1(对于true)或0(对于false)。因此,这些错误出现在trues之前。
答
select subject, winner,yr
from nobel
where yr=1984
order by subject in ('Chemistry','Physics'),subject,winner
答
SELECT winner, subject
FROM nobel
WHERE yr = 1984
ORDER BY subject IN ('Chemistry', 'Physics'), subject, winner
答
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY
case when subject IN ('Physics','Chemistry') then 0
ELSE 1
END desc,subject,winner
但是我们如何确保假trues之前出现?我们不应该在(“化学”,“物理学”)中使用主题 – dshri
@SHRIKANTDANGI。 。 。这就是这个'order by'所做的。 –