讓我們說,我有一個如下所示的查詢。
select * from `Students` s1
join `Students` s2
on s2.id = s1.id 1 and s2.marks >= 80 and s1.marks >= 80
在這種情況下,對于資料s1和s2將被放入兩個單獨的列,但我怎樣才能把它們放在不同的行,而不是?
這是一個示例資料:
--- ------
| id| marks|
--- ------|
| 1 | 88 |
| 2 | 77 |
| 3 | 81 |
| 4 | 82 |
| 5 | 75 |
| 6 | 80 |
| 7 | 90 |
| 8 | 93 |
--- ------
我想要的是id要顯示兩個連續 80 標記的行(按 排序)。例如,在這種情況下,將顯示 id 為 3、4、6、7 和 8 的行。
uj5u.com熱心網友回復:
如果您的 MySql 版本是 8.0 ,您可以使用LAG()和LEAD()視窗函式來檢查marks每一行的上一個和下一個值:
SELECT id, marks
FROM (
SELECT *,
LAG(marks) OVER (ORDER BY id) prev_marks,
LEAD(marks) OVER (ORDER BY id) next_marks
FROM students
) t
WHERE marks >= 80 AND (prev_marks >= 80 OR next_marks >= 80)
ORDER BY id;
對于以前的版本,請使用EXISTS:
SELECT s1.*
FROM students s1
WHERE s1.marks >= 80
AND EXISTS (
SELECT 1
FROM students s2
WHERE s2.id IN (s1.id - 1, s1.id 1) AND s2.marks >= 80
)
ORDER BY s1.id;
或者,使用自連接:
SELECT DISTINCT s1.*
FROM students s1 INNER JOIN students s2
ON s2.id IN (s1.id - 1, s1.id 1)
WHERE s1.marks >= 80 AND s2.marks >= 80
ORDER BY s1.id;
請參閱演示。
uj5u.com熱心網友回復:
如上所述,沒有看到您的資料,我猜您可以在查詢中使用 union
SELECT
s1.*
FROM
`students` s1
JOIN students s2
ON s2.id = s1.id 1
AND s2.marks >= 80
AND s1.marks >= 80
UNION
SELECT
s2.*
FROM
`students` s1
JOIN students s2
ON s2.id = s1.id 1
AND s2.marks >= 80
AND s1.marks >= 80
ORDER BY id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315232.html
上一篇:如何將特定列單元格映射到同一表中的其他特定列單元格?
下一篇:Rails嵌套連接-Rails4
