我必須做以下練習:
撰寫一個 SQL 查詢來列出所有出演 2004 年上映的電影的人的名字,按出生年份排序。您的查詢應輸出一個表,其中每個人的姓名只有一列。出生年份相同的人可以按任何順序列出。沒有出生年份的人不用擔心,只要有出生年份的人按順序列出。如果一個人在 2004 年出現在不止一部電影中,他們應該只出現在您的結果中一次。
我的movies.db資料庫中有以下架構:
CREATE TABLE movies (
id INTEGER,
title TEXT NOT NULL,
year NUMERIC,
PRIMARY KEY(id)
);
CREATE TABLE stars (
movie_id INTEGER NOT NULL,
person_id INTEGER NOT NULL,
FOREIGN KEY(movie_id) REFERENCES movies(id),
FOREIGN KEY(person_id) REFERENCES people(id)
);
CREATE TABLE directors (
movie_id INTEGER NOT NULL,
person_id INTEGER NOT NULL,
FOREIGN KEY(movie_id) REFERENCES movies(id),
FOREIGN KEY(person_id) REFERENCES people(id)
);
CREATE TABLE ratings (
movie_id INTEGER NOT NULL,
rating REAL NOT NULL,
votes INTEGER NOT NULL,
FOREIGN KEY(movie_id) REFERENCES movies(id)
);
CREATE TABLE people (
id INTEGER,
name TEXT NOT NULL,
birth NUMERIC,
PRIMARY KEY(id)
);
當我運行此查詢時:
SELECT DISTINCT name, birth
FROM people
WHERE id IN (
SELECT person_id
FROM stars
WHERE movie_id IN (
SELECT id
FROM movies
WHERE year = 2004
)
)
ORDER BY birth;
我得到一列填充了 NULL 值的列:

但是,如果我省略了 line ORDER BY birth,則該列會正確顯示值(盡管未排序)。我該怎么做才能解決這個問題?
uj5u.com熱心網友回復:
正常排序時,NULL 被視為最低值。
因此,當您按升序(默認值)排序時,首先是 NULL。
但該欄位birth是數字型別。
因此,對負值 DESCENDING 進行排序將推動那些討厭的 nullies。
SELECT DISTINCT name, birth
FROM people
WHERE id IN (
SELECT person_id
FROM stars
WHERE movie_id IN (
SELECT id
FROM movies
WHERE year = 2004
)
)
ORDER BY -birth DESC;
簡化測驗
create table people (id integer primary key, birth int) insert into people (birth) values (100),(42),(16),(null)
select * from people order by -birth desc身份證 | 出生 -: | ----: 3 | 16 2 | 42 1 | 100 4 | 空值
db<>在這里擺弄
另一種方法是將空值更改為不可能的高值。
ORDER BY COALESCE(birth, 999)
或者使用較新的ASC NULLS LAST語法。
ORDER BY birth ASC NULLS LAST
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/363302.html
