當前位置:首頁 » 編程語言 » sql分組後加查詢條件
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql分組後加查詢條件

發布時間: 2022-08-11 06:00:32

『壹』 sql order by分組後查詢特定有特定條件的欄位 的查詢問題

最簡單的辦法,這兩個查詢出來的結果,再聯合查詢一次就行。
還有一個辦法需要試試才行,我並不完全確定。
那就是女生人數那裡用sum(case when gender='女' then 1 else 0 end)來做,我在oracle中用過類似的方式,不知道你的資料庫這么操作行不行。

『貳』 SQL分組且根據不同的條件查詢。

SELECT 名稱, 數量+(SELECT SUM(數量) FROM B表 WHERE A表.ID=B表.ID AND A表.時間<B表.時間)
FROM A表

『叄』 sql查詢怎麼進行(多條件分組判斷匯總)

sql多條件分組查詢舉例:
比如有兩張表:
表一:
姓名 分數
——————
李一 2
李二 1
李三 1
張一 3
張二 2
張三 2
……
表二:

——



要查詢表二中的姓的數據對表一進行分組,然後將分數統計出來。
sql語句寫法如下:
SELECT
b. NAME,
sum(a.score) AS 分數
FROM
tb1 a
LEFT JOIN tb2 b ON SUBSTR(a.name FROM 1 FOR 1)= b.`name`
GROUP BY
b. NAME;
這個是Mysql的寫法 Oracle把SubStr函數改一下就可以了。

『肆』 SQL語句,分組按條件查詢!

select t1.老師id,count(學生id)
from 老師 t1 left join 學生 t2 on t1.老師id=t2.老師id
where 年齡>30
group by t1.老師id

『伍』 sql多條件分組查詢,求sql語句。

分組是用來聚集匯總的,如求平均、求總和、求最大等
你這個不需要分組,直接排序就可以了

selectname,datefromtableorderbynameasc,datedesc

如果每組要按date的降序排列,也挺簡單

with t1 as (select name, max(date) md from table group by name,

t2 as (select table.name name, table.date date, t1.md from table join t1 on table.name=t1.name

order by t1.md)

select name,date from t2

『陸』 分組查詢後再怎樣按條件查詢

sql多條件分組查詢舉例: 比如有兩張表: 表一: 姓名 分數 —————— 李一 2 李二 1 李三 1 張一 3 張二 2 張三 2 …… 表二: 姓 —— 李 張 王 要查詢表二中的姓的數據對表一進行分組,然後將分數統計出來。 sql語句寫法如下: SELECT b. NAME, sum(a.score) AS 分數 FROM tb1 a LEFT JOIN tb2 b ON SUBSTR(a.name FROM 1 FOR 1)= b.`name` GROUP BY b. NAME; 這個是Mysql的寫法 Oracle把SubStr函數改一下就可以了。

『柒』 請問,在sql查詢時,分組後滿足條件的查詢關鍵短語是什麼

選 having
group by 之後再添加條件,使用having

『捌』 關於SQL分組查詢按條件

帶明細的分組可以用compute by,group by分組是不能帶明細的,所以如果是group by可以顯示分組列name,但是不能帶id
select id,name
from a
order by name
compute max(score)
by name

『玖』 在SQL中分組查詢 Group by 的存在條件是什麼

Group By子句
Group By子句可以將表的行劃分為不同的組。分別總結每個組,這樣就可以控制想要看見的詳細信息的級別。

語法:

[ Group By [ ALL ] Group_By_expression[ ,...n ]

[ WITH ] ]

參數說明:

ALL:包含所有組和結果集,甚至包含那些任何行都不滿足WHERE子句指定的搜索條件的組和結果集。如果指定了ALL,將對組中不滿足搜索條件的匯總列返回空值。不能用CUBE或ROLLUP運算符指定ALL。如果訪問遠程表的查詢中有WHERE子句,則不支持Group By ALL操作。

Group_By_expression:對其執行分組的表達式。Group_By_expression也稱為分組列。Group_By_expression可以是列或引用列的非聚合表達式。在選擇列表內定義的列的別名不能用於指定分組列。對於不包含CUBE或ROLLUP的Group By子句,Group_By_ expression的項數受查詢所涉及的Group By列的大小、聚合列和聚合值的限制。該限制從8060位元組的限制開始,對保存中間查詢結果所需的中間級工作表有8060位元組的限制。如果指定了CUBE或ROLLUP,則最多隻能有10個分組表達式。

CUBE:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。在結果集內返回每個可能的組和子組組合的Group By匯總行。Group By匯總行在結果中顯示為NULL,但可用來表示所有值。使用GroupING函數確定結果集內的空值是否是Group By匯總值。結果集內的匯總行數取決於Group By子句內包含的列數。Group By子句中的每個操作數(列)綁定在分組NULL下,並且分組適用於所有其他操作數(列)。由於CUBE返回每個可能的組和子組組合,因此,不論指定分組列所使用的是什麼順序,行數都相同。

ROLLUP:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。按層次結構順序,從組內的最低級別到最高級別匯總組。組的層次結構取決於指定分組列時所使用的順序。更改分組列的順序會影響在結果集內生成的行數。

使用Group By子句的注意事項。

(1)在SELECT子句的欄位列表中,除了聚集函數外,其他所出現的欄位一定要在Group By子句中有定義才行。例如「Group By A,B」,那麼「SELECT SUM(A),C」就有問題,因為C不在Group By中,但是SUM(A)是可以的。

(2)SELECT子句的欄位列表中不一定要有聚集函數,但至少要用到Group By子句列表中的一個項目。例如「Group By A,B,C」,則「SELECT A」是可以的。

(3)在SQL Server中text、ntext和image數據類型的欄位不能作為Group By子句的分組依據。

(4)Group By子句不能使用欄位別名。
1.按單列進行分組

Group By子句可以基於指定某一列的值將數據集合劃分為多個分組,同一組內所有記錄在分組屬性上具有相同值。

示例:

把「student」表按照「性別」這個單列進行分組。在查詢分析器中輸入的SQL語句如下:

use student

select 性別

from student

Group By 性別

但仍然要強調SELECT子句必須與Group By後的子句或者是分組函數列相一致。

例如,由於下列查詢中「姓名」列既不包含在Group By子句中,也不包含在分組函數中,所以是錯誤的。錯誤的SQL語句如下:

use student select 姓名,性別 from student Group By 性別

例如,在「grade」表中,按「學期」分組查詢。SQL語句如下:

use studnet select 學期 from grade Group By 學期

2.按多列進行分組

Group By子句可以基於指定多列的值將數據集合劃分為多個分組。

示例:

在「student」表中,按照「性別」和「年齡」列進行分組。在查詢分析中輸入的SQL語句如下:

use student

select 性別,年齡

from student

Group By 性別,年齡

在「student」表中,首先按照「性別」分組,然後再按照「年齡」分組。

再舉一個例子,例如,在「grade」表中,按照「學號」和「課程代號」列進行分組。SQL語句如下:

use student

select 學號,課程代號 from grade Group By 學號,課程代號

按多列進行分組時有NULL組的是如何處理的。當表按多列進行分組時有NULL組,這時NULL被作為一個特定值處理,就像其他任何值一樣。也就是說,如果在某個分組列中存在兩個NULL,則按它們有相同的值那樣處理,並將它們放在相同的組中。

示例:

在「grade」表中,按「學期」和「課程代號」列進行分組。在查詢分析器中輸入的SQL語句如下:

use student

select 學期,課程代號

from grade

Group By 學期,課程代號

3.與聚集函數一起使用

Group By子句是經常與聚集函數一起使用。如果SELECT子句中包含聚集函數,則計算每組的匯總值,當用戶指定Group By時,選擇列表中任一非聚集表達式內的所有列都應包含在Group By列表中,或者Group By表達式必須與選擇列表表達式完全匹配。

示例:

在「student」表中,分別求男女生的平均年齡。在查詢分析器中輸入的SQL語句如下:

use student

select 性別,avg(年齡) as 平均年齡

from student

Group By 性別

例如,在「student」表中,分別求有多少個男生和女生。SQL語句如下:

use student

select 性別,count(性別) as 人數 from student Group By 性別

說明:關於聚合函數的詳細講解可參閱9.2.1節。

4.與HAVING子句一起使用

HAVING子句對Group By子句選擇出來的結果進行再次篩選,最後輸出符合HAVING子句中條件的記錄。HAVING子句的語法與WHERE子句的語法相類似,惟一不同的是HAVING子句中可以包含聚合函數。

語法:

[HAVING <search_condition>]

參數說明:

<search_condition>:指定組或聚合應滿足的搜索條件。當HAVING與Group By ALL一起使用時,HAVING 子句替代ALL。

示例:

在「student」表中,按「性別」分組求平均年齡,並且查詢其平均年齡大於21的學生信息。在查詢分析器中輸入的SQL語句如下:

use student

select avg(年齡), 性別

from student

Group By 性別

having avg(年齡)>21

在「grade」表中,按「學期」分組求平均成績,並且查詢「平均成績」大於93的課程信息。在查詢分析器中輸入的SQL語句如下:

use student

select 學期,avg(課程成績) as 平均成績

from grade

Group By 學期

having avg(課程成績)>93

說明:HAVING查詢條件是在進行分組操作之後才應用的;在HAVING子句中不能使用text、image和ntext 數據類型。

5.對統計結果進行排序

統計結果並不能保證結果集內記錄按一定順序排列,如果使用ORDER By子句,就可以使結果集中的結果按一定的順序(升序、降序)排序。

示例:

在「student」表中,按「性別」和「年齡」列分組,並按「年齡」列降序排序。在查詢分析器中輸入的SQL語句如下:

use student

select 性別,年齡

from student

Group By 性別,年齡

order By 年齡 desc

例如,在「grade」表中,按「學號」分組,並按課程的「平均成績」升序排序。SQL語句如下:

use student

select 學號,avg(課程成績) as 平均成績 from grade Group By 學號 order By 平均成績

『拾』 如何在已有的SQL查詢的語句中,再添加一個查詢條件

select * from
(
select a.*, b.TicketTypeKind from TBL_TicketBasic as a
left join
TBL_TicketType as b on a.TicketType = b.TicketTypeNo
)as c
where
(
(c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate())
)
and c.票據狀態 = 『未銷號』
)