sqlhavingnot
⑴ sql的SELECT語句中,「HAVING<條件表達式>」用來篩選滿足條件的呢
HAVING
子句
在
SQL
中增加
HAVING
子句原因是,WHERE
關鍵字無法與合計函數一起使用。
SQL
HAVING
語法SELECT
column_name,
aggregate_function(column_name)
FROM
table_name
WHERE
column_name
operator
value
GROUP
BY
column_name
HAVING
aggregate_function(column_name)
operator
value
HAVING
對由sum或其它集合函數運算結果的輸出進行限制。
比如,我們可能只希望看到Store_Information數據表中銷售總額超過1500美圓的商店的信息,這時我們就需要使用HAVING從句。
我們可以使用如下命令實現上述查詢目的:
SELECT
store_name,
SUM(sales)
FROM
Store_Information
GROUP
BY
store_name
HAVING
SUM(sales)
>
1500
查詢結果顯示為:
store_name
SUM(Sales)
Los
Angeles
$1800
註:SQL語言中設定集合函數的查詢條件時使用HAVING從句而不是WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結尾處。
⑵ 請問SQL語句中go有什麼作用
如果只是執行一條語句,有沒有go都一樣
如果多條語句之間用go分隔開就不一樣了
每個被go分隔的語句都是一個單獨的事務,一個語句執行失敗不會影響其它語句執行。
例如:
首先同時執行下邊的語句
select
*
from
sysobjects
where
id=a
select
getdate()
你會發現會報錯,並且不會顯示任何結果集
而你再執行
select
*
from
sysobjects
where
id=a
go
select
getdate()
go
你會發現盡管同樣會報錯,但結果集中包含select
getdate()的結果。
⑶ oracle 中 having 後面可以用and 么
1 having後可以接and
SQL> select deptno from emp group by deptno having deptno=10 and deptno>1;
DEPTNO
----------
10
2 SQL分組前可以使用where,SQL分組後只能用having篩選條件,即:出現group by分組,必須用having才能篩選
SQL> select deptno from emp where sal>100 group by deptno;
DEPTNO
----------
30
20
10
SQL> select deptno from emp group by deptno where sal>100;
select deptno from emp group by deptno where sal>100
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> select deptno from emp group by deptno where deptno>1;
select deptno from emp group by deptno where deptno>1
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> select deptno from emp group by deptno having deptno>1;
DEPTNO
----------
30
20
10
⑷ mysql sql語句group by和having的執行順序是怎樣的
(1)一般而言在group by語句中,的結果顯示只能是分組欄位,如果有其他欄位那麼必須是帶有聚合函數的,比如count,sum,max,min等,但是這里直接放個*就可以執行了?
(2)如果是在group by之前篩選,那麼怎麼count,是選擇oid=5的進行count么?如果不進行分組,資料庫怎麼能夠知道按照什麼規則進行count.
個人建議,這樣
select cuid,count(oid) from orders
group by cuid
having count(oid)=5
和
select cuid,count(oid) from orders
group by cuid
對比一下,我忘了mysql有沒有minus
如果有的話,
select cuid,count(oid) from orders group by cuid
minus
select cuid,count(oid) from orders group by cuid having count(oid)=5
就應該能看出來了。
⑸ sql語句中where和having的區別
Where 是一個約束聲明,使用Where約束來自資料庫的數據,Where是在結果返回之前起作用的,Where中不能使用聚合函數。
Having是一個過濾聲明,是在查詢返回結果集以後對查詢結果進行的過濾操作,在Having中可以使用聚合函數。
在查詢過程中聚合語句(sum,min,max,avg,count)要比having子句優先執行。而where子句在查詢過程中執行優先順序高於聚合語句。
下面用一個例子進一步說明問題。假設有數據表:
[sql] view plain
CREATE TABLE `test`.`salary_info` (
`id` int(10) unsigned NOT NULL auto_increment,
`deparment` varchar(16) NOT NULL default '',
`name` varchar(16) NOT NULL default '',
`salary` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
⑹ sql里的having什麼意思 比如說having count(學號)
對由sum、count或其它集合函數運算結果的輸出進行限制
havingcount(學號)指的是 學生數目( 大於等於)數值
createTABLETable1
(
IDintidentity(1,1)primarykeyNOTNULL,
classidint,
sexvarchar(10),
ageint,
)
--添加測試數據
InsertintoTable1values(1,'男',20)
InsertintoTable1values(2,'女',22)
InsertintoTable1values(3,'男',23)
InsertintoTable1values(4,'男',22)
InsertintoTable1values(1,'男',24)
InsertintoTable1values(2,'女',19)
InsertintoTable1values(4,'男',26)
InsertintoTable1values(1,'男',24)
InsertintoTable1values(1,'男',20)
InsertintoTable1values(2,'女',22)
InsertintoTable1values(3,'男',23)
InsertintoTable1values(4,'男',22)
InsertintoTable1values(1,'男',24)
InsertintoTable1values(2,'女',19
--舉例子說明:查詢table表查詢每一個班級中年齡大於20,性別為男的人數
selectCOUNT(*)as'>20歲人數',classidfromTable1wheresex='男'groupbyclassid,agehavingage>20
--若要確保對每種產品的計算中至少包含1500項,請使用HAVINGCOUNT(*)>1500消除返--回的銷售總數小於1500項的產品。該查詢類似於下面的示例:
SELECTProctID,SUM(LineTotal)ASTotal
FROMSales.SalesOrderDetail
GROUPBYProctID
HAVINGCOUNT(*)>1500;
⑺ SQL HAVING 問題
having稱為分組濾過條件,也就是說是分組需要的條件,所以必須與group by聯用.
select 學號 from 表s where 成績>80 group by 學號 having count(學號)>2
也就是說只有超過兩門且不包含兩門的,每門成績都在80以上且不包含80的學生的學號.
////////////////////////////////////////////////////////////////////////////
忘記了,我求的是兩門合格的同學,暈!
後邊加一個條件吧,用not exists或是not in都是可以了!
select 學號 from 表s where 成績>80 and not exists(select 學號 from 表s where 成績<=80)group by 學號 having count(學號)>2
select 學號 from 表s where 成績>80 and 學號 not in (select 學號 from 表s where 成績<=80) group by 學號 having count(學號)>2
⑻ sql group by having
對函數產生的值來設定條件時 我們會用到你說的 group by 和 having舉例來說,我們可能只需要知道哪些店的營業額有超過 1,500元。在這個情況下,我們不能使用 WHERE 的指令。那要怎麼辦呢?很幸運地,SQL 有提供一個 HAVING 的指令,而我們就可以用這個指令來達到這個目標。 HAVING 子句通常是在一個 SQL 句子的最後。一個含有 HAVING 子句的 SQL 並不一定要包含 GROUP BY 子句。HAVING 的語法如下: SELECT "欄位1", SUM("欄位2") FROM "表格名" GROUP BY "欄位1" HAVING (函數條件) 請注意: GROUP BY 子句並不是一定需要的。 在我們Store_Information 表格這個例子中, Store_Information 表格
store_name Sales Date Los Angeles 1500 Jan-05-1999 San Diego 250 Jan-07-1999 Los Angeles 300 Jan-08-1999 Boston 700 Jan-08-1999
我們打入,再執行
SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name
HAVING SUM(sales) > 1500 結果為: store_nameSUM(Sales) Los Angeles1800 好了,用法就是這樣,group by 和 having 都用到了!很簡單吧!!