MS SQL Server サンプルデータの AdventureWorksDW2019 スキーマを使って T-SQL を覚えるメモ。
ファクトテーブルの dbo.FactInternetSales と関連ディメンションテーブルを結合して、ユーザーの購入カテゴリを集計してベン図にするためのデータを抽出する。
declare @startdate date = '2013-01-01'; declare @enddate date = '2013-12-31'; with t1 as ( SELECT s.[ProductKey], s.[CustomerKey], c.[CustomerAlternateKey], s.[OrderDate], s.[OrderDateKey], c.[Gender], c.[BirthDate], convert(int, format(c.[BirthDate], 'yyyyMMdd')) as i_birthdate, floor((s.[OrderDateKey] - convert(int, format(c.[BirthDate], 'yyyyMMdd'))) / 10000) as age, c.[DateFirstPurchase], c.[GeographyKey], g.[CountryRegionCode], d.[FullDateAlternateKey], convert(varchar(7), format(d.[FullDateAlternateKey], 'yyyy-MM')) as year_month, s.[SalesOrderNumber], s.[SalesOrderLineNumber], s.[OrderQuantity] * s.[UnitPrice] as revenue, pc.[EnglishProductCategoryName] as category, psc.[EnglishProductSubcategoryName] as subcategory, p.[EnglishProductName] as productname FROM [dbo].[FactInternetSales] as s inner join [dbo].[DimDate] as d on s.[OrderDateKey] = d.[DateKey] inner join [dbo].[DimCustomer] as c on s.[CustomerKey] = c.[CustomerKey] inner join [dbo].[DimGeography] as g on c.[GeographyKey] = g.[GeographyKey] inner join [dbo].[DimProduct] as p on s.[ProductKey] = p.[ProductKey] left join [dbo].[DimProductSubcategory] as psc on p.[ProductSubcategoryKey] = psc.[ProductSubcategoryKey] left join [dbo].[DimProductCategory] as pc on psc.[ProductCategoryKey] = pc.[ProductCategoryKey] where 1 = 1 and s.[OrderDate] between @startdate and @enddate ), t2 as ( select t1.[CustomerAlternateKey], sign(sum(case when t1.[category] = 'Bikes' then 1 else 0 end)) as bikes, sign(sum(case when t1.[category] = 'Clothing' then 1 else 0 end)) as clothing, sign(sum(case when t1.[category] = 'Accessories' then 1 else 0 end)) as accessories from t1 group by t1.[CustomerAlternateKey] ), t3 as ( select t2.[bikes], t2.[clothing], t2.[accessories], count(1) as cnt from t2 group by rollup(t2.[bikes], t2.[clothing], t2.[accessories]) ) select t3.[bikes], t3.[clothing], t3.[accessories], t3.cnt from t3 where t3.[bikes] is not null and t3.[clothing] is not null and t3.[accessories] is not null;
結果はこうなる。
PowerBI で表示するとこうなる。
ベン図ビジュアルは Venn Diagram by MAQ Software を追加して利用した。
参考図書
ビッグデータ分析・活用のためのSQLレシピ
SQL Server 2016の教科書 開発編