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

sqlgroupby時間段

發布時間: 2023-01-10 15:48:27

sql 實現按日期分組

需要用convert函數轉換日期格式,並且需要用group
by來實現分組。
1、創建測試表及插入數據:
create table test
(tdate datetime,
sal int);
insert into test values ('2015-09-23 12:22:22',100);
insert into test values ('2015-09-23 01:54:34',456);
insert into test values ('2015-09-24 14:32:35',45);
insert into test values ('2015-09-24 22:23:43',67);
insert into test values ('2015-09-25 19:43:22',234);
insert into test values ('2015-09-25 08:14:12',67);
insert into test values ('2015-09-26 04:53:34',45);
insert into test values ('2015-09-26 09:46:54',78);2、執行sql語句:
select convert(varchar(10),tdate,120) tdate,sum(sal) sal from test group by convert(varchar(10),tdate,120);3、執行結果:

② sql語句中的group by要怎麼用!!

語法SELECT 欄位表 FROM 表 WHERE標准 [GROUP BY 分組欄位表]Group by 是SQL Server 中常用的一種語法,語法如下:[ GROUP BY [ ALL ] group_by_expression [ ,...n ] [ WITH { CUBE | ROLLUP } ]]
1、最常用的就是這種語法,如下:Select CategoryID, AVG(UnitPrice), COUNT(UnitPrice) FROM dbo.Procts Where UnitPrice > 30GROUP BY CategoryID ORDER BY CategoryID DESC這個語句查詢出,所有產品分類的產品平均單價,單價計數。並且單價在 30 以上的記錄。
2、再看看這種語法,如下:Select CategoryID, AVG(DISTINCT UnitPrice), COUNT(DISTINCT UnitPrice) FROM dbo.Procts Where UnitPrice > 30GROUP BY CategoryID ORDER BY CategoryID DESC使用 DISTINCT 的時候,將會去除重復的價格平均單價。
3、如果希望在分類統計之後,再使用條件過濾,下面的語句可以做為參數:Select CategoryID, SUM(UnitPrice) AS SumPriceFROM dbo.ProctsGROUP BY CategoryIDHAVING SUM(UnitPrice) > 300HAVING 與 Where 語句類似,Where 是在分類之前過濾,而 HAVING 是在分類之後過濾。它和 Where 一樣使用 AND、OR、NOT、LIKE 組合使用。
4、如果希望再在分類統計中,添加匯總行,可以使用以下語句:Select CategoryID, SUM(UnitPrice), GROUPING(CategoryID) AS 'Grouping'FROM dbo.ProctsGROUP BY CategoryID WITH ROLLUPGrouping 這一列用於標識出哪一行是匯總行。它使用 ROLLUP 操作添加匯總行。
5、如果使用 WITH CUBE 將會產生一個多維分類數據集,如下:Select CategoryID, SupplierID, SUM(UnitPrice) AS SumPriceFROM dbo.ProctsGROUP BY CategoryID, SupplierID WITH CUBE 它會產生一個交叉表,產生所有可能的組合匯總。
6、使用 ROLLUP CUBE 會產生一個 NULL 空值,可以使用以下語法解決,如下:Select CASE WHEN (GROUPING(SupplierID) = 1) THEN '-1' ELSE SupplierID END AS SupplierID, SUM(UnitPrice) AS QtySumFROM dbo.ProctsGROUP BY SupplierID WITH CUBE
它首先檢查當前行是否為匯總行,如果是就可以設置一個值,這里設置為 '-1' 。

③ 如何在mysql中group by week

易客CRM之前的版本中有一個報表是按月統計銷售情況,最近有個客戶想按周統計銷售情況。按月統計的Sql語句比較好寫,sql語句如下:
SELECT DATE_FORMAT(ec_salesorder.edate,』%Y-%m』) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,也就是把edate日期以月的形式顯示,然後groupby,那麼按周如何統計呢?

搜了一下mysql的manual,在這里找到一個解決方法,通過mysql的week函數來做,sql語句如下:SELECT WEEK(ec_salesorder.edate) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,這個方法有個缺陷,不能顯示年份,僅僅靠一個周數不方便查看統計信息。

繼續研究mysql manual,在DATE_FORMAT函數介紹發現2個格式符和周有點關系:
%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
把上面的Sql語句中改成:
SELECT DATE_FORMAT(ec_salesorder.edate,』%x %v』) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m
顯示的結果如下:
m total so_count
2009 11 10000.00 3
2009 12 44000.00 5
如果周日為一周的第一天,那麼sql語句應該為:
SELECT DATE_FORMAT(ec_salesorder.edate,』%X %V』) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m

結果應該沒錯,不出意外,易客CRM下個版本將增加按周統計銷售情況的報表。

④ sql語句按照日期分組怎麼寫

1.如果你的時間格式是2012-01-13
17:35:52.217這樣的形式,(主要是那個01不要是1),用下面這個
SELECT
convert(varchar(10),時間,23),SUM(
數字數據
)
FROM

group
by
convert(varchar(10),時間,23)
2.如果你的時間格式不是上面的格式,先轉化成datetime:
SELECT
convert(varchar(10),cast(時間
as
datetime),23)
,SUM(數字數據)
FROM

group
by
convert(varchar(10),cast(時間
as
datetime),23)
3.如果報錯,請追問~

⑤ SQL中 我給個時間段 要把這個時間段中 每個星期的數據統計到一起

告訴你個思路
sql裡面有個方法可以獲取一個日期的當前是多少周,然後group
by
這個就可以了
sql里取第幾周是從星期天開始算的
你要SET
DATEFIRST
1
就是星期一了

⑥ SQL 15分鍾為一時間段 查詢1小時內每個時間段

select sum(quarter1),sum(quarter2),sum(quarter3),sum(quarter4)
from
(select quarter1,0 quarter2,0 quarter3,0 quarter4
from table where minute<15
union all
select 0 quarter1,quarter2,0 quarter3,0 quarter4
from table where minute>=15 and minute<30
union all
select 0 quarter1,0 quarter2,quarter3,0 quarter1
from table where minute>=30 and minute<45
union all
select 0 quarter1,0 quarter2,0 quarter3,quarter4
from table where minute>=45
)
//group by^^^^^^^^^^^^
這樣查詢出來的內容,第一個欄位為,前十五分鍾內容,第二個欄位為中間十五分鍾內容…………

⑦ sql語句中groupby的使用

select id,name from tabwhere name in (select distinct name from tab)

⑧ SQL: 一般情況按年分組,特殊年份按指定日期分組,SELECT語句怎麼寫

如果只是一年的話還好說,如果是三四年那就麻煩了,但是如果每一年都要這樣還反而簡單了,最怕的就是某些特殊要求,那樣不好寫。
我寫一個一年的,寫一個全部的。
這是一年的,可能casewhen不能這么直接放在groupby的後面,那麼可以先這么改造一下表,然後外面在套一層select就可以實現了。
select case when year(日期)=2017 and month(日期)<5 then '2017-05-01以前'
when year(日期)=2017 and month(日期)>4 then '2017-05-01至年底' else year(日期) end
年份,count(*) from table group by
(case when year(日期)=2017 and month(日期)<5 then '2017-05-01以前'
when year(日期)=2017 and month(日期)>4 then '2017-05-01至年底' else year(日期) end)
全部的
select concat(year(日期),case when month(日期)<5 then 1 else 2 end) 組合欄位,count(*) from table group by concat(year(日期),case when month(日期)<5 then 1 else 2 end)
其實是一樣的,就是把原表改了一下,只是這兩種情況是比較好改的,如果有三年或者四年是需要進行這樣的分組,那就麻煩了。如果有這種情況,建議在表中加一個標示欄位,那樣就能簡單一些了。

⑨ 請教基於Group By 時間分組統計SQL語句優化

展開全部
這個要看你怎麼分組了,如果需要先計算的話,可以先這樣
select
*,CONVERT(VARCHAR(10),
時間欄位,
112)
vtime
into
#tmp
from
表名
select
vtime,sum(欄位名)
from
#tmp
group
by
vtime

⑩ sql語句中的group by要怎麼用!!

1、定義
「Group
By」表達的意思就是按照「By」表明的規則對所有數據進行歸類,所謂的歸類就是將數據分成許多個「小區域」,對這些「小區域」里的數據進行處理。
2、原始表
3、簡單Group
By
示例1
select
類別,
sum(數量)
as
數量之和
from
A
group
by
類別
返回結果如下表,實際上就是分類匯總。
4、Group
By

Order
By
示例2
select
類別,
sum(數量)
AS
數量之和
from
A
group
by
類別
order
by
sum(數量)
desc
返回結果如下表
在Access中不可以使用「order
by
數量之和
desc」,但在SQL
Server中則可以。
5、Group
By中Select指定的欄位限制
示例3
select
類別,
sum(數量)
as
數量之和,
摘要
from
A
group
by
類別
order
by
類別
desc
示例3執行後會提示下錯誤,如下圖。這就是需要注意的一點,在select指定的欄位要麼就要包含在Group
By語句的後面,作為分組的依據;要麼就要被包含在聚合函數中。
6、Group
By
All
示例4
select
類別,
摘要,
sum(數量)
as
數量之和
from
A
group
by
all
類別,
摘要
示例4中則可以指定「摘要」欄位,其原因在於「多列分組」中包含了「摘要欄位」,其執行結果如下表
「多列分組」實際上就是就是按照多列(類別+摘要)合並後的值進行分組,示例4中可以看到「a,
a2001,
13」為「a,
a2001,
11」和「a,
a2001,
2」兩條記錄的合並。
7、Having與Where的區別
where
子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,where條件中不能包含聚組函數,使用where條件過濾出特定的行。
having
子句的作用是篩選滿足條件的組,即在分組之後過濾數據,條件中經常包含聚組函數,使用having
條件過濾出特定的組,也可以使用多個分組標准進行分組。
示例5
select
類別,
sum(數量)
as
數量之和
from
A
group
by
類別
having
sum(數量)
>
18
示例6:Having和Where的聯合使用方法
select
類別,
SUM(數量)from
A
where
數量
gt;8
group
by
類別
having
SUM(數量)
gt;
10
8、Compute

Compute
By
select
*
from
A
where
數量
>
8
執行結果:
示例7:Compute
select
*
from
A
where
數量>8
compute
max(數量),min(數量),avg(數量)
執行結果如下:
compute子句能夠觀察「查詢結果」的數據細節或統計各列數據(如例10中max、min和avg),返回結果由select列表和compute統計結果組成。
示例8:Compute
By
select
*
from
A
where
數量>8
order
by
類別
compute
max(數量),min(數量),avg(數量)
by
類別
執行結果如下:
示例8與示例7相比多了「order
by
類別」和「...
by
類別」,示例10的執行結果實際是按照分組(a、b、c)進行了顯示,每組都是由改組數據列表和改組數統計結果組成.