簡體   English   中英

根據另一列中的值按 column1 或 column2 對行進行排序

[英]Sort rows by column1 or column2 based on value in another column

假設我有 2 張桌子:

培訓班

| id | name         | is_sort_by_borrower |
|----|--------------|---------------------|
| 1  | Comp Science | 1                   |
| 2  | Biz Admin    | 0                   |
| 3  | Physics      | 1                   |

圖書

| id  | title  | borrower | last_borrow_date | course_id |
| --- | ------ | -------- | ---------------- | --------- |
| 1   | Book A | 523      | 11/12/19 12:33   | 1         |
| 2   | Book B | 423      | 11/15/19 12:33   | 1         |
| 3   | Book C | 401      | 10/22/19 12:33   | 1         |

課程中有一列is_sort_by_borrower ,我想得到這樣的結果

| course       | book_title | borrower | last_borrow_date | is_sort_by_borrower |
|--------------|------------|----------|------------------|---------------------|
| Comp Science | Book A     | 523      | 11/12/19 12:33   | 1                   |
| Comp Science | Book B     | 423      | 11/15/19 12:33   | 1                   |
| Comp Science | Book C     | 401      | 10/22/19 12:33   | 1                   |
| Comp Science | Book D     | 377      | 11/19/19 12:33   | 1                   |
| Biz Admin    | Book E     | 122      | 11/20/19 12:33   | 0                   |
| Biz Admin    | Book F     | 419      | 11/12/19 12:33   | 0                   |
| Biz Admin    | Book G     | 65       | 10/18/19 12:33   | 0                   |
| Physics      | Book H     | 446      | 8/31/19 12:33    | 1                   |
| Physics      | Book I     | 398      | 11/2/19 12:33    | 1                   |
| Physics      | Book J     | 376      | 9/30/19 12:33    | 1                   |
| Physics      | Book K     | 249      | 10/11/19 12:33   | 1                   |

是否可以按borrower對結果進行排序,按last_borrow_date對結果進行排序?

是的,在 SELECT 中創建另一列,並使用 CASE 用您想要的值填充它,然后按此排序。 您還可以在 WHERE 子句中使用 CASE 語句,具體取決於您是否希望排序列顯示結果。

參考: MYSQL 按案例訂購問題

參考: https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html

在您的示例中:

SELECT
    c.id, c.name, c.is_sort_by_borrower, 
    b.id, b.title, b.borrower, b.last_borrow_date
FROM
    courses c
INNER JOIN
    books b on b.course_id = c.id
ORDER BY
    CASE 
        WHEN is_sort_by_borrower=1 THEN borrower
        WHEN is_sort_by_borrower=0 THEN last_borrow_date 
    END ASC

ORDER BY需要如下所示:

ORDER BY course -- courses grouped together
       , CASE WHEN is_sort_by_borrower = 1 THEN borrower END DESC
       , CASE WHEN is_sort_by_borrower = 0 THEN last_borrow_date END DESC

對於給定的課程,兩列中的一列將是 NULL,具體取決於排序標志。 您不能在同一列中組合這兩種數據類型,否則結果將是不可預測的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM