SQL 如何返回最大值所在的多條記錄
SQL 中透過 top 或 limit 子句得到第一條資料不難,再配合排序,就能得到最大的那一行:
select top 1 * from T order by f desc
如果最大值有多條記錄,想全部得到,就需要子查詢得到最大值,然後二次遍歷資料得到和最大值相同的所有記錄:
select * from T where f=(select max(f) from T)
或用視窗函式 rank() 做一下排名,然後取第 1 名:
select * from (select T.*,rank()over(partition by 1 order by age desc) f_rank from T) where f_rank=1
無論如何都要分成兩步才能得到結果。試想我們去海邊撿最大的貝殼,一邊走一邊比對就行了,始終保留最大的,同樣大的就都留在手裡,這很自然。但 SQL 表達能力有限,沒有保留多個最大的能力,只能來回走兩趟,這種繞遠的解題思路如果再巢狀幾層,將會給程式設計師帶來很大的理解負擔。
這種情況如果用集算器 SPL 語言就比較容易,從資料庫得到原始資料:
>T=connect(”mysqlDB”).query(“select * from T”)
然後用 maxp 的 @a 選項,就能取出全部的最大值記錄了:
=T.maxp@a(f)
上面這個用法是個小改善,SQL 裡還有更多彆扭、思維方式很繞的計算,根源在於 SQL 依賴的關係代數體系不支援有序集合計算,無法利用資料在集合中的位置,沒有平衡好集合與離散資料的關係。SPL 在做有序集合計算時,對 SQL 裡的 TopN 進行了變種,可以取 TopN 的值 / 記錄 / 記錄在集合中的位置,以應對更廣泛的計算需求;可以應用到分組子集,增強分組後續操作的能力,參考
集算器 SPL 是解決 SQL 難題的專業指令碼語言,它語法簡單,符合自然思維,是天然分步、層次清晰的程式導向計算語言。它採用與資料庫無關的統一語法,編寫的演算法可在資料庫間無縫遷移。它是桌面級計算工具,即裝即用,配置簡單,除錯功能完善,可設定斷點、單步執行,每步執行結果都可檢視。請參閱
當資料不在資料庫裡時,SPL 載入資料仍然方便:
=file(“d:/t.csv”).import(;,",")
SPL能很方便地嵌入到JAVA應用,可參考 。
具體使用方法可參考 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2699325/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mybatis一對多查詢resultMap只返回了一條記錄MyBatis
- MongoDB隨機查詢返回一條或N條記錄的方法MongoDB隨機
- C# ling to sql 取多條記錄最大時間的例項程式碼C#SQL
- postgresql 多條記錄合併一條,或取最新的一條資料SQL
- SQL:查詢每個類別最新的5條記錄SQL
- sql刪除重複記錄只保留一條SQL
- 一次性插入多條記錄
- 一句話得到中間值的多條記錄
- 一個表單同時提交多條記錄
- python-max()返回最大值Python
- 如何分析一條sql的效能SQL
- sql 多組條資料取最新的一條資料SQL
- 使用Spring JDBC新增記錄如何返回自增主鍵值SpringJDBC
- SQL 如何查詢連續上漲 N 次的記錄SQL
- MySql先分組統計總記錄數,再獲取記錄數中的最大值MySql
- sql根據多個欄位查詢重複記錄SQL
- mysql 批次更新與批次更新多條記錄的不同值實現方法MySql
- 記錄一個sqlSQL
- Vue 返回記住滾動條位置詳解Vue
- 如何捕獲和記錄SQL Server中發生的死鎖SQLServer
- SQL優化工作記錄SQL優化
- Laravel sql 日誌記錄LaravelSQL
- git獲取當前所在的目錄Git
- IDEA如何快速定位到當前開啟檔案所在的目錄Idea
- mysql刪除一條記錄MySql
- 【TUNE_ORACLE】列出返回行數較多的巢狀迴圈(NESTED LOOPS)SQL的SQL參考Oracle巢狀OOPSQL
- 【SQL】SQL中if條件的使用SQL
- mysql 存在該記錄則更新,不存在則插入記錄的sqlMySql
- mysql快速新增百萬條記錄的語句MySql
- 演算法題:返回滑動視窗中的最大值演算法
- spring-boot記錄sql探索SpringbootSQL
- Laravel8記錄請求和返回日誌Laravel
- [20201204]為什麼返回2行記錄.txt
- 18. 寫篇部落格,記錄方法 返回記錄,和類 生命週期的問題
- DBeaver如何一次性執行多條sql語句,原來和單條不一樣!SQL
- MySQL 記錄所有執行了的 sql 語句MySql
- Oracle如何刪除表中重複記錄保留第一條Oracle
- 一條update SQL語句是如何執行的SQL