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   管理者用   
このエントリーをはてなブックマークに追加





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ