count と distinct

  全ての行数と列単位の行数



社員テーブルにおいて、手当の種類は NULL,1000,2000,3000 で、
1000 --> 一人
2000 --> 三人
3000 --> 一人
であるとします

全ての行数
  
select count(*) as 社員数 from 社員テーブル
  

NULLを除く列の行数
  
select count(手当) as 手当対象人数 from 社員テーブル
  

実行結果
手当対象人数
5

NULLを除く列のうち重複しない行数 ( EXCEL、MDB を除く )
  
select count(distinct 手当) as 手当の種類の数 from 社員テーブル
  

NULLを除く列のうち重複しない行数 ( EXCEL、MDB )
  
select count(手当) as 手当の種類の数
from
(
   select distinct 手当 from 社員テーブル
) as INVIEW
  

実行結果
手当の種類の数
3

  
select 所属
	,count(*) as 所属別社員数 
 from 社員テーブル 
 group by 所属
 order by 所属;

select 所属
	,count(手当) as 所属別手当対象者 
 from 社員テーブル 
 group by 所属
 order by 所属;
  

●所属●所属別社員数
000112
000223
000315
●所属●所属別手当対象者
00011
00023
00031

以下は、SQLServer と PostgreSQL と Oracle で指定可能なテーブルに関するデータを
一度に取得する方法です
  
select
(select count(*) from 社員テーブル) as 社員数 
,
(select count(手当) from 社員テーブル) as 手当対象人数
,
(select sum(給与) from 社員テーブル) as 基本給合計
,
(select sum(手当) from 社員テーブル) as 手当合計
--from dual (Oracle では from dual が必要です)
  

社員数手当対象人数基本給合計手当合計
505875000010000




  結果の重複を取り除く



  
select distinct 手当 from 社員テーブル
  
で、重複データを取り除きますが、RDBMS によって表示結果が違います
(※ distinct は select で一度だけ指定できます。また、結果の列は一つである必要はありません)

EXCEL、MDB、SQLServer、MySQL での結果
手当
 
1000
2000
3000

Oracle、PostgreSQL での結果
手当
1000
2000
3000
 

結果データは同じですが、これは NULL のソート順序の違いを示します










  infoboard   管理者用   
このエントリーをはてなブックマークに追加




SQLの窓  天気  IT用語辞典
Yahoo!ニュース  マルチ辞書
PHP マニュアル  Google URL短縮 


フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ