Situasi awal saya adalah seperti berikut:
+------------+-------------+ | legacyRank | forcedRank | +------------+-------------+ | 0 | NULL | | 1 | 6 | | 2 | NULL | | 3 | 1 | | 4 | NULL | | 5 | NULL | | 6 | 2 | +------------+-------------+
Anda boleh menjana jadual ini melalui skema berikut:
CREATE TABLE two_column_order ( legacyRank VARCHAR(45), forcedRank VARCHAR(45) ); INSERT INTO two_column_order (legacyRank, forcedRank) VALUES (5, NULL); INSERT INTO two_column_order (legacyRank, forcedRank) VALUES (6, 2); INSERT INTO two_column_order (legacyRank, forcedRank) VALUES (7, NULL); INSERT INTO two_column_order (legacyRank, forcedRank) VALUES (0, NULL); INSERT INTO two_column_order (legacyRank, forcedRank) VALUES (1, NULL); INSERT INTO two_column_order (legacyRank, forcedRank) VALUES (2, 6); INSERT INTO two_column_order (legacyRank, forcedRank) VALUES (3, NULL); INSERT INTO two_column_order (legacyRank, forcedRank) VALUES (4, 1); SELECT * FROM two_column_order order by CASE when `forcedRank` <> NULL THEN `forcedRank` ELSE `legacyRank` END
Matlamatnya adalah untuk memastikan setiap baris tidak mengandungi NULL forcedRank
列的行放置在此 forcedRank
pada kedudukan tepat yang dinyatakan dalam lajur. Paparan yang dijangkakan adalah seperti berikut:
+------------+-------------+ | legacyRank | forcedRank | +------------+-------------+ 0 | 0 | NULL | 1 | 3 | 1 | 2 | 6 | 2 | 3 | 2 | NULL | 4 | 4 | NULL | 5 | 5 | NULL | 6 | 6 | 6 | +------------+-------------+
Seperti yang anda lihat, jika tidak NULL, setiap baris diambil apabila diisih mengikut lajur forcedRank
列排序的位置。当 NULL 行仍然按 legacyRank
pada kedudukan yang tidak diduduki oleh baris bukan NULL, tetapi baris paksa tidak pernah dialihkan.
Mengikut perintah ini, saya mencuba dalam ORDER BY
中使用 CASE WHEN
sintaks seperti ini:
SELECT * FROM two_column_order order by CASE WHEN (`forcedRank` is NULL ) THEN `legacyRank` END , -`forcedRank` DESC, `legacyRank`
Tetapi hasilnya tidak menepati jangkaan saya:
+------------+-------------+ | legacyRank | forcedRank | +------------+-------------+ | 3 | 1 | | 6 | 2 | | 6 | 6 | | 0 | NULL | | 2 | NULL | | 4 | NULL | | 5 | NULL | +------------+-------------+
Jadi, bagaimanakah caranya saya membuat legacyRank
lajur tersusun melebihi baris pangkat paksa tanpa mengalihkannya?
NULL
不能像您需要使用IS
那样进行比较,或者在您的情况下使用IS NOT
Violin
Kerana jawapan pertama tidak akan memberikan anda jawapan yang betul.
Saya menukar susunan dengan menambah titik perpuluhan pada nombor asal supaya ia lebih besar daripada kedudukan paksa baharu.
Ia akan mengekalkan susunan dan memaksa nombor menjadi lebih kecil daripada kedudukan tradisional dan ia akan mendapat keputusan berikut
Violin