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

sql表格分組匯總

發布時間: 2022-06-30 14:26:25

1. 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函數改一下就可以了。

2. SQL分組匯總問題

CREATETABLE#test(AVARCHAR(100),bFLOAT,cDATE)

INSERTINTO#test(A,B,c)
SELECT'A01',10,'2017-10-06'UNIONALL
SELECT'A01',50,'2017-10-07'UNIONALL
SELECT'A01',30,'2017-10-16'UNIONALL
SELECT'B01',10,'2017-10-06'
--SELECT*FROM#test
;withaaas(
select
a
,min(C)min_date,dateadd(dd,3,min(C))max_date
from
#test
groupby
a
)
select
bb.A
,sum(b)
,bb.c
from
aainnerjoin#testbbonaa.A=bb.Aand(bb.cbetweenaa.min_dateandaa.max_date)
groupby
bb.A,bb.c


droptable#test

臨時數據貌似有問題,2017-10-16的數據不應該被統計到才是正確

3. SQL對一組數據分組匯總

select left(c,charindex('-',c)-1),sum(d) from t
Group by left(c,charindex('-',c)-1)
--怎麼還有102101-112呢?

4. 以6.2節建立的各表為例,用sql完成以下匯總或分組查詢

摘要 SUM(列) --求出總和,操作的列是數字

5. sql語句 如何分組後得到記錄總數

SELECT COUNT(*)

FROM (SELECT 分組欄位 FROM 表

GROUP BY 分組欄位

)別名


或者

SELECT COUNT(*)

FROM (SELECT distinct 分組欄位 FROM 表)別名

(5)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 後面

6. 資料庫中如何分類、分組並總計SQL數據

通常,我們確實需要對所有數據進行排序。SQL的ORDER BY子句將數據按字母或數字順序進行排列。因此,同類數據明顯分類到各個組中。然而,這些組只是分類的結果,它們並不是真正的組。ORDER BY顯示每一個記錄,而一個組可能代表多個記錄。 2、減少組中的相似數據 分類與分組的最大不同在於:分類數據顯示(任何限定標准內的)所有記錄,而分組數據不顯示這些記錄。GROUP BY子句減少一個記錄中的相似數據。例如,GROUP BY能夠從重復那些值的源文件中返回一個唯一的郵政編碼列表: SELECTZIP FROMCustomers GROUPBYZIP 僅包括那些在GROUP BY和SELECT列列表中字義組的列。換句話說,SELECT列表必須與GROUP列表相匹配。只有一種情況例外:SELECT列表能夠包含聚合函數。(而GROUP BY不支持聚合函數。) 記住,GROUP BY不會對作為結果產生的組分類。要對組按字母或數字順序排序,增加一個ORDER BY子句(#1)。另外,在GROUP BY子句中您不能引用一個有別名的域。組列必須在根本數據中,但它們不必出現在結果中。 3、分組前限定數據 您可以增加一個WHERE子句限定由GROUP BY分組的數據。例如,下面的語句僅返回肯塔基地區顧客的郵政編碼列表。 SELECTZIP FROMCustomers WHEREState='KY' GROUPBYZIP 在GROUP BY子句求數據的值之前,WHERE對數據進行過濾,記住這一點很重要。

7. 關於sql語句怎麼寫兩張表的關聯並分組匯總

這實際上是列更換及分組匯總的問題:
請注意,進貨表名用「order」會產生關鍵字沖突,下面代碼用方括弧[order]以區別於排序用關鍵字order,至於syabese對有關鍵字沖突的表名是否也是用方括弧,請參閱聯機說明。一般來說,不同的資料庫都是採用方括弧防止關鍵字沖突。下面代碼在ACCESS和SQLSERVER均檢驗通過,相信syabese也沒問題。為了避免沖突可以為進貨表改名。

select t.gdno,sum(t.qty_sales) as sum_qty_sales,sum(t.qty_order)
as sum_qty_order from (select gdno,qty as qty_sales,0 as qty_order
from sales union all select gdno,0 as qty_sales,qty as qty_order
from [order])t group by t.gdno
試一試效果吧!注意用兩表連接的辦法,在兩張表的gdno不能全部一一對應時可能會丟失部分數據,所以為了保證所有情況下都計算準確,我採用了UNION ALL 運算符。

8. sql中根據表中一個欄位分組如何分別統計每個分組的記錄數

分組統計可以參考以下操作:

當數組重復的時候分組才有意義,因為一個人也可以分為一組,只是沒有意義而已,分組採用GROUP BY語句完成,語法如下:

9. 求個 SQL 多表、分組匯總合計的 語句

select a.專業級別,a.專業名稱,b.計劃人數,sum(case when 學生編號='X' then 1 else 0 end) 報名人數,sum(case when 學生編號<>'X' then 1 else 0 end) 審核人數,
sum(case when 住址='長沙' then 1 else 0 end) 長沙,
sum(case when 住址='望城' then 1 else 0 end) 望城,
sum(case when 住址='寧鄉' then 1 else 0 end) 寧鄉,
sum(case when 住址='瀏陽' then 1 else 0 end) 瀏陽,
sum(case when 性別='男' then 1 else 0 end) 男,
sum(case when 性別='女' then 1 else 0 end) 女,
from
TB_Student a,TB_Profession b
where a.專業級別=b.專業級別 and a.專業名稱=b.專業名稱
group by a.專業級別,a.專業名稱,b.計劃人數

10. 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