Nie wiem, jak zamówić imiona po tym, jak posortowałem temat fizyki i chemii!
Pytanie: Przedmiotem ekspresji IN ("Chemia", "Fizyka") może być używany jako wartość - będzie to 0 lub 1.
Pokaż zwycięzców z 1984 r. I przedmiot zamówienia według nazwy podmiotu i zwycięzcy; ale wymień chemię i fizykę jako ostatnią.
SELECT winner, subject, subject IN("Physics", "Chemistry")
FROM nobel
WHERE yr=1984
ORDER BY CASE
WHEN subject IN ("Physics", "Chemistry") = 0 THEN subject IN ("Physics", "Chemistry")
WHEN subject IN ("Physics", "Chemistry") = THEN winner
ELSE winner
End
adres URL do problemu po więcej szczegółów http://sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial
Odpowiedzi:
4 dla odpowiedzi № 1Próbowałem w SQLZOO i po SQL daje prawidłowy wynik.
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject IN ("Physics","Chemistry"), subject, winner
1 dla odpowiedzi nr 2
The in
operator nie może być użyty w selekcji tak jak ty, ale byłeś na właściwej ścieżce, używając wyrażenia case w order by
klauzula. To czego chcesz to to:
SELECT
winner, subject
FROM
nobel
WHERE
yr = 1984
ORDER BY
CASE WHEN subject IN ("Physics","Chemistry") THEN 1 ELSE 0 END,
subject,
winner
Jak stwierdza problem IN ("Physics","Chemistry")
oceni na 1 lub 0, aby można było z niego skorzystaćpełne wyrażenie przypadku w niektórych bazach danych; choć nie jest to zgodne ze standardowym ANSI SQL, MySQL pozwoli, jak sądzę, ale na przykład MS SQL nie będzie.
0 dla odpowiedzi № 3
select winner, subject
from nobel
where yr = "1984"
order by ( case subject
when "Chemistry" then 1
when "Physics" then 2
else 0
end), subject, winner