9月売上商品種別数

  MDB



取引データより 9 月のデータを抽出します。

  
select 商品コード
    from 取引データ  
    where DatePart("m",取引日付) = 9
  

このままでは、一つの商品コードに対して複数の行が存在するので、商品の種類を数える事ができません。
distinct を使用して、重複する行を一行のデータに変換します。

  
select distinct 商品コード
    from 取引データ  
    where DatePart("m",取引日付) = 9 
  

そのデータから、何種類の商品が存在するかを取得します。

  
select count(*) as 9月売上商品種別数  
 from  
( select distinct 商品コード
    from 取引データ  
    where DatePart("m",取引日付) = 9 
)
  



  SQLServer



SQLServer では、9月売上商品種別数 がエラーになります。[] で挟む必要があります
また、インラインビューに別名が必要です。

※ "m" でも動くようですが、m が正解です。

  
select count(*) as [9月売上商品種別数]
from
(select distinct 商品コード
from 取引データ
where DatePart(m,取引日付) = 9) as 一時表
  

通常の RDBMS では以下の構文が有効です

  
select count(distinct 商品コード) as [9月売上商品種別数]
from 取引データ
where DatePart(m,取引日付) = 9
  



  MySQL 5.1

やはり、9月売上商品種別数 ではエラーになり、` で挟む必要があります。
インラインビューの別名が必要です。

※ 月を求める関数は MySQL のものです。

  
select count(*) as `9月売上商品種別数`
from
(select distinct 商品コード
from 取引データ
where DATE_FORMAT(取引日付,'%m') = 9) as 一時表
  

MySQL 4.0 では、上記のインラインビューは使用できませんが、以下の count( distinct 列名 ) は実行可能です。

  
select count(distinct 商品コード) as `9月売上商品種別数`
from 取引データ
where DATE_FORMAT(取引日付,'%m') = 9
  



  Oracle

9月売上商品種別数 ではエラーになり、" で挟む必要があります。
インラインビューの別名が必要ですが、Oracle は、インラインビューの別名で as が使えません

  
select count(*) as "9月売上商品種別数"
from
(select distinct 商品コード
from 取引データ
where EXTRACT(MONTH from 取引日付) = 9) "一時表"
  

  
select count(distinct 商品コード) as "9月売上商品種別数"
from 取引データ
where EXTRACT(MONTH from 取引日付) = 9
  



  PostgreSQL

Oracle と同じでしたが、インラインビューの別名に as が使用できます

  
select count(*) as "9月売上商品種別数"
from
(select distinct 商品コード
from 取引データ
where EXTRACT(MONTH from 取引日付) = 9) as "一時表"
  

  
select count(distinct 商品コード) as "9月売上商品種別数"
from 取引データ
where EXTRACT(MONTH from 取引日付) = 9
  










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





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ