/ / SQLZOO SELECT z nobel # 14 - sql, wybierz

SQLZOO SELECT z nobel # 14 - sql, wybierz

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 № 1

Pró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