我對 SQL 很陌生,并試圖構建一個 Java 資料庫查詢以傳入行識別符號代碼,回傳該行中所有列的值,以及 5 個最接近的高低行到原始列之一中的值. 我可以使用傳入的固定值找到以前的問題,但是當值存在于表中時不知道如何處理它。
這是我迄今為止的嘗試:
SELECT * FROM (SELECT code, value FROM table1 t1 WHERE code = x) AS a
UNION ALL
SELECT * FROM (SELECT * from table1 t2 WHERE NOT code = x AND count <= t1.count order by count DESC LIMIT 5) AS b
UNION ALL
SELECT * FROM (SELECT * from table1 t3 WHERE NOT code = x AND count <= t1.count order by count ASC LIMIT 5) AS c
如果有人能指出我正確的方向,我將不勝感激。謝謝
示例表:
| 代碼 | 價值 |
|---|---|
| 澳大利亞 | 15 |
| 墨西哥 | 22 |
| 西班牙 | 36 |
| 尼日利亞 | 87 |
| 波蘭 | 55 |
| 厄立特里亞 | 17 |
| 越南 | 26 |
| 愛爾蘭 | 107 |
| 瑞典 | 55 |
| 加拿大 | 26 |
舉個例子,但如果我輸入澳大利亞作為我的代碼,我想回傳最接近的 4:
| 代碼 | 價值 |
|---|---|
| 澳大利亞 | 15 |
| 厄立特里亞 | 17 |
| 墨西哥 | 22 |
| 越南 | 26 |
| 加拿大 | 26 |
uj5u.com熱心網友回復:
如果列中沒有重復項Value:
SELECT *
FROM tablename
ORDER BY ABS(Value - (SELECT Value FROM tablename WHERE Code = 'Australia'))
LIMIT ?;
如果有重復:
SELECT *
FROM tablename
ORDER BY Code = 'Australia' DESC,
ABS(Value - (SELECT Value FROM tablename WHERE Code = 'Australia'))
LIMIT ?;
更改?為回傳的總行數(包括“澳大利亞”)。
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/490799.html
標籤:sql sqlite sql-order-by sql 限制
