創建測試表
10年專注建站、設計、互聯網產品定制網站建設服務,業務涵蓋品牌網站設計、購物商城網站建設、小程序開發、軟件系統開發、重慶APP軟件開發等。憑借多年豐富的經驗,我們會仔細了解每個客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創意性的商業解決方案,創新互聯更提供一系列網站制作和網站推廣的服務,以推動各中小企業全面信息數字化,并利用創新技術幫助各行業提升企業形象和運營效率。
create?table?test
(id?int,
month?int,
dept_id?varchar2(10),
counts?int,--由于你給的字段名是關鍵字,這里我稍作修改
al?int);--這個字段同上
insert?into?test?values?(1,1,'市北',20,100);
insert?into?test?values?(2,1,'市南',30,100);
insert?into?test?values?(3,2,'市北',30,100);
insert?into?test?values?(4,2,'市南',40,100);
insert?into?test?values?(5,3,'市北',50,100);
insert?into?test?values?(6,3,'市南',60,100);
sql語句
select?t.month,
max(decode(t.dept_id,'市北',t.persent,0))?市北,
max(decode(t.dept_id,'市南',t.persent,0))?市南
from
(select?month,dept_id,(counts/al)*100||'%'?persent?from?test)?t
group?by??t.month
結果截圖
按照你的說法,我的理解的如果不放group by那么可能出現兩行完全重復的數據,是這個意思吧。
不能放day,因為day是在這個sql中起的一個別名,只有在查詢完成后day才有效果(比如在having中們就可以用),但是在group by中查詢并沒有完成,所以day沒有用。
這個有一個辦法,就是你把day前面的那一串(也就是別名day表示的那串round函數中的內容)整個放在groupby的后面。
還有一個辦法不一定好用(這個方法有個前提,就是每個分組的最后day結果只有一個,而不是可能有好幾個),你可以在round前面加一個max或者min,這樣就是聚合函數了(也就是說不需要在groupby后面加day的那一串了),如果完全相同,那么可能只顯示一個(可能,我忘了如果存在相等的最大值時,是怎么樣的一個結果了,你可以試試),這樣就不需要大改動,就能完成了、
oracle用group分組查詢數據最小的一條表中字段phonenumber,score,examtime
要取出時間段中phonenumber的score最大并且examtime最小的記錄,用max和min取的值都不是正確的記錄值,用排序子查詢的方法可以取到數據最小的一條。
看你的意思
大概這樣理解
數據庫表里面有編號為1和編號為2的
男女若干個
現在要分別統計
編號為1的男有多少個
女有多少個
編號為2的
男有多少個
女有多少個;如果是這樣的話,首先先按編號分組
select
*
from
student
group
by
id;
然后再這個基礎上要分別統計男和女
可以用到oracle特有的decode函數
select
sum(decode(sex,'男',1,0))
男
from
student
這樣就得到了男
以此類推
整個sql語句
可以這樣寫
select
id
編號,sum(decode(sex,'男',1,0))
男,sum(decode(sex,'女',1,0))
女
from
student
group
by
id;
當前題目:oracle怎么分組查詢,oracle按月分組查詢
標題鏈接:http://vcdvsql.cn/article26/hshgcg.html
成都網站建設公司_創新互聯,為您提供定制網站、企業建站、網站策劃、做網站、App設計、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯