當前位置:首頁 » 編程語言 » sql兩個orderby
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql兩個orderby

發布時間: 2023-02-10 10:19:55

sql語句Order by兩個條件怎麼寫

ORDER BY 後可加2個欄位,用英文逗號隔開。
f1用升序, f2降序,sql該這樣寫
ORDER BY f1, f2 DESC
也可以這樣寫,更清楚:
ORDER BY f1 ASC, f2 DESC
如果都用降序,必須用兩個desc
ORDER BY f1 DESC, f2 DESC

⑵ 一個Sql語句里能有兩個排序(兩個Order By)嗎

不可以。
只能是
ORDER BY field1, field2 這樣子的

但是可以這樣
select *
from (select * from tab t1 order by field1) t2
order by field2.不過這樣沒有實際意義了

⑶ 關於SQL語句order by

你這條sql語句查詢了兩張表,應該用INNER JOIN匹配兩個表的關聯欄位,這樣就不會有重復。

⑷ sql ORDER BY 多個欄位,排序變慢幾十倍,求解

SQL 中使用order By後,查詢慢,加上主鍵 和 需要排序的欄位組合排序 速度有很大的提升
在SQL Server查詢數據測試,數據約三萬條, 數據欄位以時間倒序排序,
sql:
select ID, column1,column2,column3,record_date from table where ...... order by record_date desc
此時查詢數據需要15秒左中 ,將orderby 修改為 order by ID desc,record_date desc 後,查詢的數據一秒不到即可查詢出來

在linq中,排序的時候,一定要用new 排序的對象,不然ID 將不會被加入到SQL中

linq:
var t = from a in t where ......select a;
t = t.orderby(t=>t.ID).orderby(t=>t.record_date) 此處的ID在解釋成SQL時,不會在SQL中
應寫為:
t = t.orderby(t=>new{t.ID,t.record_date})

⑸ sql語句中的order by

order
by這個指令來達到我們的目的。
order
by
的語法如下:
select
"欄位名"
from
"表格名"
[where
"條件"]
order
by
"欄位名"
[asc,
desc]
[]
代表
where
是一定需要的。不過,如果
where
子句存在的話,它是在
order
by
子句之前。
asc
代表結果會以由小往大的順序列出,而
desc
代表結果會以由大往小的順序列出。如果兩者皆沒有被寫出的話,那我們就會用
asc。
我們可以照好幾個不同的欄位來排順序。在這個情況下,
order
by
子句的語法如下(假設有兩個欄位):
order
by
"欄位一"
[asc,
desc],
"欄位二"
[asc,
desc]
若我們對這兩個欄位都選擇由小往大的話,那這個子句就會造成結果是依據
"欄位一"
由小往大排。若有好幾筆資料
"欄位一"
的值相等,那這幾筆資料就依據
"欄位二"
由小往大排。

⑹ SQL中Order By的意義和用法

以下內容參考 w3school 中關於SQL的教學,可以點擊藍字參考原文。

ORDER BY 語句用於 根據指定的列 結果集 進行 排序

ORDER BY 語句 默認 按照 升序 對記錄進行排序。

如果您希望按照 降序 對記錄進行排序,可以使用 DESC 關鍵字。

註:對字元串排序的時候會按 首字元 ASCII值 排列,如果首字元相同,則向後看一位。

原始的表 (用在例子中的):
Orders 表:

實例 1
以字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company

實例2
以字母順序顯示公司名稱(Company),並以數字順序顯示順序號(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
結果:

看此結果和上一結果不同之處在於,Company值相同的行,排序按照OrederNumber的升序排列。

實例 3
以逆字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
結果:

實例 4
以逆字母順序顯示公司名稱,並以數字順序顯示順序號:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
結果:

注意:在以上的結果中有兩個相等的公司名稱 (W3School)。只有這一次,在第一列中有相同的值時,第二列是以升序排列的。如果第一列中有些值為 nulls 時,情況也是這樣的。

問題描述
Mysql排序時如果用的欄位為字元型,排序出來時這樣的:
1,10,2,20,3,4,5
這種排序是按照字元從第一個字元開始比較出來的,但不是我們想要的,我們想要的是:
1,2,3,4,5……,10,20

解決方案
排序時,把相應的欄位轉換成整型,使用CAST函數,如下:
CAST(seat_row AS UNSIGNED)
將seat_row列轉換為UNSIGNED的數值類型。

⑺ SQL語句中,如果有group by 和order by兩個語句,是先分組還是先排序

SQL語句中,如果有group by 和order by兩個語句,是先分組還是先排序?

先進行分組處理。
Group By 和 Having, Where ,Order by這些關鍵字是按照如下順序進行執行的:Where, Group By, Having, Order by。

首先where將最原始記錄中不滿足條件的記錄刪除(所以應該在where語句中盡量的將不符合條件的記錄篩選掉,這樣可以減少分組的次數)
然後通過Group By關鍵字後面指定的分組條件將篩選得到的檢視進行分組

接著系統根據Having關鍵字後面指定的篩選條件,將分組檢視後不滿足條件的記錄篩選掉
最後按照Order By語句對檢視進行排序,這樣最終的結果就產生了。
在這四個關鍵字中,只有在Order By語句中才可以使用最終檢視的列名,如:

SELECT FruitName, ProctPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProctPlace = N'china')
ORDER BY IDE
這里只有在ORDER BY語句中才可以使用IDE,其他條件語句中如果需要引用列名則只能使用ID,而不能使用IDE。

SQL語句中,有group by 和order by兩個語句,是先分組還是先排序?

肯定是group by先
order by優先順序最低,在最後
group by 語句執行後記錄會按關鍵字自動升序?
不一定,group by只負責分組。

VF 中先排序order by還是先分組 group by

這是需要看題上的要求,要求要分組才分組,要求要排序才排序的,並不是每道題兩個都同時需要

sql語句中 order by 排序原則

ORDER BY這個指令來達到我們的目的。
ORDER BY 的語法如下:
SELECT "欄位名"
FROM "表格名"
[WHERE "條件"]
ORDER BY "欄位名" [ASC, DESC]
[] 代表 WHERE 是一定需要的。不過,如果 WHERE 子句存在的話,它是在 ORDER BY 子句之前。 ASC 代表結果會以由小往大的順序列出,而 DESC 代表結果會以由大往小的順序列出。如果兩者皆沒有被寫出的話,那我們就會用 ASC。
我們可以照好幾個不同的欄位來排順序。在這個情況下, ORDER BY 子句的語法如下(假設有兩個欄位):
ORDER BY "欄位一" [ASC, DESC], "欄位二" [ASC, DESC]
若我們對這兩個欄位都選擇由小往大的話,那這個子句就會造成結果是依據 "欄位一" 由小往大排。若有好幾筆資料 "欄位一" 的值相等,那這幾筆資料就依據 "欄位二" 由小往大排。

select-sql 語句中,篩選用(?)子句,分組用group by 子句,排序用order by 子句

篩選用
where 子句

比如
select * from sutdent where 年齡=20
這就是根據年齡這個條件進行篩選

oracle sql語句中 先執行where還是order by

where 裡面條件 and 是先執行 and 前面 還是後面條件這個其實和你寫的順序不大,這個先後順序,是資料庫來根據表/索引的資訊來決定的。例如一個 學生表, 有學號,姓名,性別其中 學號是主鍵, 姓名上面有個索引。 找 名字叫 強妹 的女生: SELECT * FROM 學生 WHERE 姓名='強妹' AND 性別 = '女' 與 SELECT * FROM 學生 WHERE 性別 = '女' AND 姓名='強妹' 資料庫在處理 SQL 以前,都會去分析, 發現 查詢的條件中, 姓名上面有索引,而性別上面沒有。 那麼優先根據 姓名的條件, 去檢索,然後再去把通過索引得到的資料,去篩選 性別=女的比如表裡面共有10000行。姓名叫 '強妹' 的只有一個。那麼通過索引,一步就定位到那一行。然後再判斷這一行資料的 性別欄位, 是不是 = '女' 假如 姓名/性別 都沒有索引呢?那就是執行 全表掃描。不分先後。什麼意思呢?就是假如 表裡面10000行資料。那就是從第一行開始, 檢視 姓名與性別 條件。 滿足的返回。 不滿足的丟棄。 直到100行都處理完。並不是一口氣把所有的資料,都放到記憶體裡面,然後 姓名判斷一次, 去掉部分, 性別判斷一次,再去掉部分。 藍屏

sql語句中的where語句和order by語句,哪個語句先執行

④SELECT [DISTINCT] * | 列 [別名],列 [別名],……
①FROM 表名稱 [別名],表名稱 [別名],……
②[WHERE 限定條件]
③[GROUP BY 分組欄位,[分組欄位,分組欄位……]]
⑤[ORDER BY 排序列名 [ASC|DESC],排序列名 [ASC|DESC],……]

where先執行:SQL語句執行順序:SELECTFROM--1WHERE--2GROUPBY--3HAVING--4ORDERBY--5

where先執行,然後對篩出來的結果再排序。
如果不先按where查出來的結果再排序,那先排序出來的結果有什麼意義呢。

⑻ Sql order by 和 group BY 如何共同運用

1、如果聲明了 GROUP BY 子句,輸出就分成匹配一個或多個數值的不同組里。如果出現了 HAVING 子句,那麼它消除那些不滿足給出條件的組。

2、如果聲明了 ORDER BY 子句,那麼返回的行是按照指定的順序排序的。如果沒有給出 ORDER BY,那麼數據行是按照系統認為可以最快生成的方法給出的。

例如:

select name,count(*) number

from users

group by name

order by 2 desc

查詢users表中,相同姓名的人有多少個,按照重名次數最多的人名從多而少排列。

(8)sql兩個orderby擴展閱讀:

GROUP BY 和 ORDER BY一起使用時,ORDER BY要在GROUP BY的後面。

group by a,b,c 則a,b,c三個欄位是按照先按a欄位對數據行進行排序,再按b欄位對那些欄位a為同一個值的數據行進行排序,再再按c欄位對那些欄位a為同一個值且欄位b為同一個值的數據行進行排序

order by a,b,c 也是如此

故而

表T 有a,b,c三個欄位,按a分組再按c排序的方法如下:

select * from T order by a,c//兩個欄位順序不能顛倒

或者

select * from T group by a,c//兩個欄位順序不能顛倒

⑼ 我對sql語句的order by 這樣理解對嗎(菜鳥問題)

1.你理解的很有意思,不過實際情況應該是:如果order by後有兩個以上的欄位,那麼結果集的所有記錄先按前面的欄位排序,前面欄位一樣的部分,按後面的欄位排序。例如:

order by 性別 年齡 姓名

排序結果就是

男 20 安一
男 20 張三
男 30 安小一
女 18 林文
女 18 魏鳳
-------------------------------------------

2.正確。
-------------------------------------------

3.你所說的結果是正確的,但並不是什麼「永遠會存在一個 order by id asc 的默認排序」,是如果不寫order by 的話,會按數據記錄的物理寫入順序輸出結果集。
-------------------------------------------

4.可以實現你想要的效果。

⑽ 第六十四章 SQL命令 ORDER BY(二)

下面的示例按照 RowID 的反向順序對記錄進行排序:

下面兩個示例展示了在 ORDER BY 子句中指定排序列的不同方法。
下面兩個查詢是等價的;
第一種方法使用列名作為排序項,第二種方法使用列號(選擇項列表中項目的序號):

下面的示例按包含IRIS列表數據的欄位進行排序。
因為IRIS列表是一個以格式化字元開始的編碼字元串,所以本例使用 $LISTTOSTRING 來按實際欄位數據值排序,而不是按列表元素編碼:

動態SQL可以使用輸入參數為 ORDER BY 子句提供文字值;
它不能使用輸入參數來提供欄位名、欄位別名、欄位號或排序關鍵字。
下面的動態SQL示例使用輸入參數按名字對結果集記錄進行排序:

以下基於游標的嵌入式SQL示例執行相同的操作:

ORDER BY 子句中使用的每個字面值都會生成一個不同的緩存查詢。
不對 ORDER BY 字面值執行字面值替換。
這是因為 ORDER BY 可以使用整數來指定列號。
更改這個整數將導致一個完全不同的查詢。

可以使用 CASE 表達式定義一個通用查詢,該查詢可以根據提供的主機變數值進行排序。
例如,下面的示例可以根據名稱或年齡排序,這取決於 var 的值:

下面的示例指定了兩個 CASE 表達式。
它按任何情況計算為true進行排序。
如果兩種情況都為真,則按國家排序,在國家內按城市排序:

ASC 和 DESC 參數在 CASE END 關鍵字之後指定。

注意,在 CASE 表達式中必須根據列名指定欄位。
在此上下文中,不能指定列別名或列號。

ORDER BY ordering-item 的值不應該超過(大約) 400 到 500 個字元,這取決於 ordering-item 的數量和其他因素。
如果一個 ordering-item 值超過這個最大長度,則運行帶有 ORDER BY 子句的查詢可能會導致 SQLCODE -400 致命錯誤。
這是因為全局引用的最大編碼長度有限制,這是一個固定的 IRIS系統限制。
為了防止這個問題,在作為 ORDER BY 子句基礎的欄位的排序規則設置中使用截斷長度。
例如,以下查詢超過了這個限制:

添加一個 maxlen 截斷長度的排序函數允許該程序成功執行:

IRIS將欄位的已整理值截斷為 400 個字元。
請記住,如果欄位內容在前 400 個字元內不是唯一的,則數據可能稍有混亂,但這種情況不太可能發生。
如果出現這種情況,可以嘗試通過使用更大的值進行截斷來避免顯示無序的數據;
但是,如果值太大,將導致 <SUBSCRIPT> 錯誤。

還要注意,最大長度是全局引用的整個編碼長度,包括全局名稱的長度。
它不是簡單的下標。