一、概述
問題描述:資料集中的排序是指通過 SQL 直接在資料庫查詢時排序。此方法效能最佳,但所有計算都必須要在資料庫中做,會導緻 SQL 很複雜,難以維護,另外有些計算是無法用 SQL 完成的。
解決思路:僅使用 SQL 實現一些簡單的,單一的【升冪】或【降冪】。
本文將介紹在定義資料集時使用 SQL 語句可以設定的排序型別。
【ORDER BY】 關鍵字:【ORDER BY】 關鍵字用於對結果集按照一個列或者多個列進行排序。預設按照【升冪】進行排序,即 【ASC】 關鍵字;如果需要按照【降冪】排序,可以使用 【DESC】 關鍵字。
例如:升冪:SELECT * FROM 銷量 order by 銷量 。
升冪:【SELECT * FROM 銷量 order by 銷量 asc】 。
降冪:【SELECT * FROM 銷量 order by 銷量 desc】 。
二、範例
1
升冪。
新增資料庫。
點擊【資料庫查詢】。
輸入SQL 查詢語句:【SELECT * FROM 銷量 order by 銷量】。
點擊【預覽】。
即可看到資料按【銷量】欄位升冪排序,如下圖所示。
2
降冪。
新增資料庫。
點擊【資料庫查詢】。
輸入SQL 查詢語句:【SELECT * FROM 銷量 order by 銷量 desc】。
點擊【預覽】。
即可看到資料按【銷量】欄位降冪排序,如下圖所示。
3
多列排序。
新增資料庫。
點擊【資料庫查詢】。
輸入SQL 查詢語句:【SELECT * FROM 銷量 order by 英文簡稱,銷量】。
點擊【預覽】。
即可看到資料先按【英文簡稱】列升冪排序,【銷量】列再按對應的【英文簡稱】升冪排序,如下圖所示。
4
動態排序。
新增資料庫,點擊【資料庫查詢】,SQL 查詢語句爲:【SELECT * FROM 銷量 where 地區='華北' order by 銷量 ${a} 】。定義了一個資料集參數 【a】用來表示排序。將參數【a】預設為【asc】。如下圖1所示。
將資料集中的資料牽曳入表格,選定 A2 儲存格,設定資料設定爲【列表】,報表式樣如下圖2所示。
選中【銷量】欄位所在 E1 儲存格,新增【超級鏈結】→【動態參數】,進入編輯,參數是在 SQL 中設定的參數 【a】 ,參數值輸入公式:【if(a="desc","asc","desc") 】。如下圖3所示。
注:如果需要兩個欄位均設定動態參數,SQL 語句可修改爲: 【SELECT * FROM 銷量 where 地區='華北' order by 銷量 ${a},銷售員 ${a} 】 。
5
效果預覽。
PC端展示:點擊【分頁預覽】,即可在網頁中看到報表,效果如下圖所示。
HTML5 端及App 端展示:點擊【行動端預覽】,行動端瀏覽器/APP掃描網頁中的QR code即可。詳情可見 預覽行動端範本 。App 端和 HTML5 端報表效果和PC端一緻。
三、注意事項
如果 MySQL 資料庫無法實現按中文拼音首字母排序,需要看一下表欄位是否使用的是 UTF-8 編碼,如果使用的是 UTF-8 編碼,則需要使用 MySQL 的 convert 方法轉換成 GBK 編碼進行排序。且前提是 MySQL 安裝了 GBK 字元集,不然會報錯。
SQL 語句如下:
升冪:【SELECT * FROM 銷量 order by convert(英文簡稱 using gbk)】 。
降冪:【SELECT * FROM 銷量 order by convert(英文簡稱 using gbk) desc】 。