![](/img/trans.png)
[英]select rows based on column1 and column2 that have value of column 1
[英]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.