『壹』 sql語句實現分組統計
方法和詳細的操作步驟如下:
1、第一步,創建一個測試表,詳細代碼見下圖,轉到下面的步驟。
『貳』 sql中分組取值及求和的問題
我想查詢一段時間內,利潤的總和,根據表只需要顯示出廠額,銷售額,和利潤每項值顯示這期間的總和就可以,我現在的結果是顯示每天的,我只想要這些天的這三個項的總和就可以
代碼是查詢2天的出現了第一天和第二天的每條信息,查詢幾天就分別顯示幾條,
『叄』 sql 某個欄位中所包含的某個值分組
沒看懂 你要的結果長什麼樣? 你分組要做哪項聚合?
『肆』 sql語句 如何分組後得到記錄總數
SELECT COUNT(*)
FROM (SELECT 分組欄位 FROM 表
GROUP BY 分組欄位
)別名
或者
SELECT COUNT(*)
FROM (SELECT distinct 分組欄位 FROM 表)別名
(4)sql分組值擴展閱讀:
SQL分組查詢
在SQL Server中使用的分組查詢是ORDER BY子句,使用ORDER BY子句要同聚合函數配合使用才能完成分組查詢,在SELECT查詢的欄位中如果欄位沒有使用聚合函數就必須出現在ORDER BY子句中(即SELECT後邊的欄位名要麼出現在聚合函數中,要麼在ORDER BY子句中使用)
在分組查詢中還可以配合使用HAVING子句,定義查詢條件。
使用group by進行分組查詢
在使用group by關鍵字時,在select列表中可以指定的項目是有限制的,select語句中僅許以下幾項:
1、被分組的列
2、為每個分組返回一個值得表達式,例如用一個列名作為參數的聚合函數
3、group by 有一個原則,就是 select 後面的所有列中,沒有使用聚合函數的列,必須出現在 group by 後面
『伍』 SQL 分組數據
連載的上一篇文章,我們講到通過 SQL 聚合函數可以匯總數據,比如對行進行計數,計算和與平均數,獲取最大值和最小值。
但目前為止,我們的匯總都是正對所有行或匹配 WHERE 子句的數據上進行的。比如返回供應商 DLL01 提供的產品數目:
運行結果:
那如果我們想要返回每個供應商提供的產品數目呢?這就需要用到分組聚合了。使用分組可以將數據分為多個邏輯組,然後對每個組進行聚合計算。
分組的創建使用 SELECT 語句中的 GROUP BY 子句,比如下面的 SQL 返回每個供應商提供的產品數目:
運行結果:
上述 SELECT 語句返回兩個列, vend_id 為供應商 ID,是分組欄位; num_prods 為計算欄位,使用 count(*) 聚合而來。 GROUP BY 子句告訴 DBMS 按 vend_id 排序並分組數據,然後對每個分組而不是整個數據集進行聚合。
除了使用 GROUP BY 分組數據外, SQL 還允許過濾分組,規定包含哪些分組,排除哪些分組。比如,我們只想列出供應產品數目在 2 種以上的供應商及其供應產品的數目。
這里有個過濾條件: 供應產品數目大於 2 ,條件中的 供應產品數目 是針對分組後進行聚合產生的計算欄位,因此無法使用 WHERE 子句。 WHERE 子句過濾時指定的是行,而不是分組。
為此, SQL 提供了 HAVING 子句來過濾分組,並且 HAVING 支持所有 WHERE 操作符。下面,我們來完成供應產品數目在 2 種以上的供應商及其供應產品的數目。
運行結果:
跟前面的結果相比,供應產品數目等於 2 的供應商信息就不見啦~
關於 WHERE 子句和 HAVING 子句的區別,我們可以再通過一個案例理解一下。下面的 SQL 檢索具有兩個或以上產品且其價格大於等於 4 的供應商。
其中產品表如下:
SQL 語句如下:
運行結果:
截止目前,我們已經學了不少的 SELECT 子句,下面小魚針對目前我們已經學習的 SELECT 子句來總結一下他們在 SELECT 語句中的先後順序。
表中子句的排列順序即為它們在 SELECT 語句中依次出現的次序:
還是上面的例子,檢索具有兩個或以上產品且其價格大於等於 4 的供應商和其供應的產品數目,不過檢索檢索需要按照產品數目升序排列。
運行結果:
本節,我們學習了使用 GROUP BY 子句對多組數據進行匯總計算,並返回每個分組的結果。並實踐了如何使用 HAVING 子句過濾分組。
『陸』 SQL分組查詢最大值最小值
查詢語句參考如下:
select
UserName,--
Convert(char(8),dealTm,112) as date,--日期
min(dealTm) as earliestTime ,--最大
max(dealTm) as latestTime--最小
from t2
group by Convert(char(8),dealTm,112) ,UserName
『柒』 SQL對取值范圍進行分組匯總的幾種辦法
可以用到自定義函數,
create or replace FUNCTION g2(v NUMBER) RETURN INT IS
TYPE it IS TABLE OF INT;
BEGIN
IF v>0 AND v<= 500 THEN
RETURN 1;
ELSIF v>500 AND v<= 1000 THEN
RETURN 2;
ELSIF v>1000 AND v<= 5000 THEN
RETURN 3;
ELSIF v>5000 AND v<= 20000 THEN
RETURN 4;
ELSE
RETURN 0;
END IF;
END g2;
/
select g2(id) f, count(1) cnt from t1 group by g2(id) order by 1;
F CNT
---------- ----------
1 500
2 500
3 4000
4 15000
當然,我們也可以不藉助函數,而用case when語句實現同樣的條件分組,但是語句比較冗長,列名是固定的。不利於閱讀與修改,也不利於代碼重用。
select (case
when id >0 AND id<= 500 THEN 1
when id >500 AND id<= 1000 THEN 2
when id >1000 AND id<= 5000 THEN 3
when id >5000 AND id<= 20000 THEN 4
else 0
end) f,
count(1) cnt from t1 group by
(case
when id >0 AND id<= 500 THEN 1
when id >500 AND id<= 1000 THEN 2
when id >1000 AND id<= 5000 THEN 3
when id >5000 AND id<= 20000 THEN 4
else 0
end)
order by 1;
F CNT
---------- ----------
1 500
2 500
3 4000
4 15000
『捌』 sql 取分組 最小值
select USERTYPE from CONFIG_USER group by USERTYPE ORDER BY USERTYPE DESC
先分組再排序 取第一個就行了
『玖』 sql分組統計
方法和詳細的操作步驟如下:
1、第一步,創建一個測試表,詳細代碼見下圖,轉到下面的步驟。
『拾』 SQL查詢取分組最大值
selectt1.分類,t1.商品名稱,table.庫存,t1.更新時間
from (
select 分類,商品名稱,max(更新時間) 更新時間 from table
group by 分類,商品名稱
) t1
inner join table on t1.分類=table.分類 and t1.商品名稱=table.商品名稱 and t1.更新時間
=table.更新時間
(10)sql分組值擴展閱讀:
關於SQL最大值查詢語句的記錄
SELECT
bsnum,
STATE AS FILE_STATE
FROM
FILE_RECORD r
WHERE
STATE =(
SELECT
MAX(STATE)
FROM
FILE_RECORD
WHERE
bsnum = r.bsnum
);
小技巧:有時需要測試sql語法但又覺得創建表麻煩,可以使用創建一個臨時表,如下:
select id, count(t.id) from
(
select 1 as id, 2 as age, 'F' as sex from al union
select 2 as id, 2 as age, 'M' as sex from al union
select 3 as id, 3 as age, 'F' as sex from al union
select 4 as id, 4 as age, 'M' as sex from al
)t