sql統計表
表統計信息是資料庫基於成本的優化器最重要的參考信息;統計信息不準確,優化器可能給出不夠優化的執行計劃或者是錯誤的執行計劃。對統計信息的計算分為非持久化統計信息(實時計算)與持久化統計信息。
非持久化統計信息
統計信息沒有保存在磁碟上,而是頻繁的實時計算統計信息;
每次對表的訪問都會重新計算其統計信息;
假設針對一張大表的頻繁查詢,那麼每次都要重新計算統計信息,很耗費資源。
持久化統計信息
把一張表在某一時刻的統計信息值保存在磁碟上;
避免每次查詢時重新計算;
如果表更新不是很頻繁,或者沒有達到 MySQL 必須重新計算統計信息的臨界值,可直接從磁碟上獲取;
即使 MySQL 服務重啟,也可以快速的獲取統計信息值;
統計信息的持久化可以針對全局設置也可以針對單表設置。
接下來,詳細說 MySQL 統計信息如何計算,何時計算,效果評估等問題。在 MySQL Server 層來控制是否自動計算統計信息的分布,並且來決策是持久化還是非持久化。
B. 用SQL語句統計一個表有多少列
SQL SERVER:
select NAME from syscolumns
where id = OBJECT_ID('表名');所有列名稱,
select count(*) from syscolumns
where id = OBJECT_ID('表名');列的數量
ORACLE:用戶名和表名都大寫
select column_name,data_type from all_tab_columns
where owner='用戶名' and table_name='表名';所有列名稱
select count(*) from all_tab_columns
where owner='用戶名' and table_name='表名';列的數量
有問題再留言
C. SQL 統計報表
-- create sample table
create table tab1 (id int, output_style char(1), amount int, output_date date);
insert into tab1 values(1,'D',1000,'2009-11-12');
insert into tab1 values(2,'C',1000,'2009-11-12');
insert into tab1 values(3,'G',1000,'2009-12-12');
insert into tab1 values(4,'Z',1000,'2010-01-01');
insert into tab1 values(5,'D',1300,'2009-11-12');
insert into tab1 values(6,'C',1400,'2009-11-12');
insert into tab1 values(7,'G',2000,'2009-12-12');
insert into tab1 values(8,'Z',1000,'2010-01-01');
-- query
select concat(year(output_date), month(output_date)) as yearmonth,
sum(case when output_style='C' then amount else 0 end) as C_Amount,
sum(case when output_style='G' then amount else 0 end) as G_Amount,
sum(case when output_style='Z' then amount else 0 end) as Z_Amount,
sum(case when output_style='D' then amount else 0 end) as D_Amount from tab1 group by output_date
D. sql如何查詢一個表並統計表內的數據條數
其實使用select count(1) from Tablename就可以了,沒有必要在裡面寫欄位名的,這樣效率是最高的,後面你也可以跟上條件!
E. 關於Oracle中的SQL生成統計表
select a.CostRegisterNo 編號,a.TopicNo 項目號,sum(nvl(a.bjf,0)) 編校費,sum(nvl(a.ysf,0)) 印刷費,sum(nvl(a.zbf,0)) 製版費
from
(select CostRegisterNo,
TopicNo,
sum(case when CostName='編校費' then CostAmt end) bjf,
sum(case when CostName='印刷費' then CostAmt end) ysf,
sum(case when CostName='製版費' then CostAmt end) zbf
from t group by CostRegisterNo,
TopicNo) a
group by a.CostRegisterNo ,a.TopicNo ;
---補充---
select a.CostRegisterNo 編號,a.TopicNo 項目號,
sum(nvl(a.bjf,0)) 編校費,sum(nvl(a.ysf,0)) 印刷費,sum(nvl(a.zbf,0)) 製版費
from
(select CostRegisterNo,
TopicNo,
sum(decode(CostName,'編校費', CostAmt)) bjf,
sum(decode(CostName,'印刷費', CostAmt)) ysf,
sum(decode(CostName,'製版費', CostAmt)) zbf
from t group by CostRegisterNo,
TopicNo) a
group by a.CostRegisterNo ,a.TopicNo ;
表名我定義的是t,你可以換一下
這里用了個nvl函數,這個主要的意思就是將查詢出來的結果為空的轉成0
F. SQL多表查詢統計怎麼弄
既然兩個表的結構一模一樣,如果想統計人名出現的總數,可以將兩個表先用union all合並到一起,然後再對其進行統計。
例如,有下面兩個表:成績表A、成績表B,這兩個表的結構是完全一樣的,分別都有20條記錄,但兩個表有部分記錄是重復的:
如果將兩個表合並到一起,可以使用union all。注意,這里必須加上all,否則,那些重復的記錄就會被排除掉了,從而導致出現的總數不準確。例如,下面的語句沒有加all,輸出的姓名記錄數只有25個,有另外15個重復的被排除掉了:
所以,一定要加上all。這樣得到兩個表的合集後,再用括弧將其包起來,把它作為一個表來處理,再次統計即可。sql語句如下:
select 姓名,count(*) as 出現次數 from (select 姓名 from 成績表A union all select 姓名 from 成績表B) group by 姓名
統計結果如下圖:
我是人民郵電出版社簽約作者,著有多本與B/S、C/S開發方面的專業書籍,歡迎關注並一起交流提高,謝謝!
G. 如何創建一個SQL的累計統計表
1、第一步,創建一個測試表,見下圖,轉到下面的步驟。
H. SQL如何統計多表總記錄數
有2個方法:
1、select
*,(select
count(u_id)
from
h_travel_line
where
u_id
=
a.u_id)
已線路數
from
h_travel
a
2、SELECT
c.ttt
AS
已線路數,
h_travel.*
FROM
h_travel
INNER
JOIN
(SELECT
COUNT(*)
AS
ttt,
u_id
FROM
h_travel_line
GROUP
BY
STID)
c
ON
h_travel.u_id
=c.u_id