Chapter24_Examples
Chapter24_Examples
1
USE sample;
CREATE TABLE project_dept
( dept_name CHAR( 20 ) NOT NULL,
emp_cnt INT,
budget FLOAT,
date_month DATE );
Example 24.2
USE sample;
INSERT INTO project_dept VALUES ('Research', 5, 50000, '01.01.2007');
INSERT INTO project_dept VALUES ('Research', 10, 70000, '02.01.2007');
INSERT INTO project_dept VALUES ('Research', 5, 65000, '07.01.2007');
INSERT INTO project_dept VALUES ('Accounting', 5, 10000, '07.01.2007');
INSERT INTO project_dept VALUES ('Accounting', 10, 40000, '02.01.2007');
INSERT INTO project_dept VALUES ('Accounting', 6, 30000, '01.01.2007');
INSERT INTO project_dept VALUES ('Accounting', 6, 40000, '02.01.2008');
INSERT INTO project_dept VALUES ('Marketing', 6, 100000, '01.01.2008');
INSERT INTO project_dept VALUES ('Marketing', 10, 180000, '02.01.2008');
INSERT INTO project_dept VALUES ('Marketing', 3, 100000, '07.01.2008');
INSERT INTO project_dept VALUES ('Marketing', NULL, 120000, '01.01.2008');
Example 24.3
USE sample;
SELECT dept_name, budget,
SUM( emp_cnt ) OVER( PARTITION BY dept_name ) AS emp_cnt_sum,
AVG( budget ) OVER( PARTITION BY dept_name ) AS budget_avg
FROM project_dept
WHERE dept_name IN ('Accounting', 'Research');
Example 24.4
USE sample;
SELECT dept_name, SUM(emp_cnt) AS cnt, AVG( budget ) AS budget_avg
FROM project_dept
WHERE dept_name IN ('Accounting', 'Research')
GROUP BY dept_name;
Example 24.5
USE sample;
SELECT dept_name, budget, emp_cnt,
SUM(budget) OVER(PARTITION BY dept_name ORDER BY budget) AS sum_dept
FROM project_dept;
Example 24.6
USE sample;
SELECT dept_name, budget, emp_cnt,
SUM(budget) OVER(PARTITION BY dept_name ORDER BY budget
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
AS sum_dept
FROM project_dept;
Example 24.7
USE sample;
SELECT dept_name, CAST( budget AS INT ) AS budget,
SUM( emp_cnt ) OVER( PARTITION BY budget ) AS emp_cnt_sum,
AVG( budget ) OVER( PARTITION BY dept_name ) AS budget_avg
FROM project_dept
WHERE dept_name IN ('Accounting', 'Research');
Example 24.8
USE sample;
CREATE SEQUENCE Seq START WITH 1 INCREMENT BY 1;
GO
CREATE TABLE T1 (col1 CHAR(10), col2 CHAR(10));
GO
INSERT INTO dbo.T1(col1, col2)
SELECT NEXT VALUE FOR Seq OVER(ORDER BY dept_name ASC), budget
FROM (SELECT dept_name, budget
FROM project_dept
ORDER BY budget, dept_name DESC
OFFSET 0 ROWS FETCH FIRST 5 ROWS ONLY) AS D;
Example 24.9
USE sample;
SELECT dept_name, emp_cnt, SUM(budget) sum_of_budgets
FROM project_dept
WHERE dept_name IN ('Accounting', 'Research')
GROUP BY dept_name, emp_cnt;
Example 24.10
USE sample;
SELECT dept_name, emp_cnt, SUM(budget) sum_of_budgets
FROM project_dept
WHERE dept_name IN ('Accounting', 'Research')
GROUP BY CUBE (dept_name, emp_cnt);
-- Alternative way !!
USE sample;
SELECT dept_name, emp_cnt, SUM(budget) sum_of_budgets
FROM project_dept
WHERE dept_name IN ('Accounting', 'Research')
GROUP BY dept_name, emp_cnt
WITH CUBE;
Example 24.11
USE sample;
SELECT dept_name, emp_cnt, SUM(budget) sum_of_budgets
FROM project_dept
WHERE dept_name IN ('Accounting', 'Research')
GROUP BY ROLLUP (dept_name, emp_cnt);
Example 24.12
USE sample;
SELECT dept_name, emp_cnt, SUM(budget) sum_b, GROUPING(emp_cnt) gr
FROM project_dept
WHERE dept_name IN ('Accounting', 'Marketing')
GROUP BY ROLLUP (dept_name, emp_cnt);
Example 24.13
USE sample;
SELECT dept_name, YEAR(date_month), SUM(budget),
GROUPING_ID (dept_name, YEAR(date_month)) AS gr_dept
FROM project_dept
GROUP BY ROLLUP (dept_name, YEAR(date_month));
Example 24.14
USE sample;
SELECT dept_name, emp_cnt, SUM(budget) sum_budgets
FROM project_dept
WHERE dept_name IN ('Accounting', 'Research')
GROUP BY GROUPING SETS ((dept_name, emp_cnt),(dept_name));
Example 24.15
USE sample;
SELECT RANK() OVER(ORDER BY budget DESC) AS rank_budget,
dept_name, emp_cnt, budget
FROM project_dept
WHERE budget <= 30000;
Example 24.16
USE sample;
SELECT DENSE_RANK() OVER( ORDER BY budget DESC ) AS dense_rank,
ROW_NUMBER() OVER( ORDER BY budget DESC ) AS row_number,
dept_name, emp_cnt, budget
FROM project_dept
WHERE budget <= 40000;
Example 24.17
USE sample;
SELECT date_month, dept_name, emp_cnt, budget,
RANK() OVER( PARTITION BY date_month ORDER BY emp_cnt desc ) AS rank
FROM project_dept;
Example 24.18
USE sample;
SELECT dept_name, budget,
VAR(budget) OVER(PARTITION BY dept_name) AS budget_var,
STDEV(budget) OVER(PARTITION BY dept_name) AS budget_stdev
FROM project_dept
WHERE dept_name in ('Accounting', 'Research');
Example 24.19
USE sample;
SELECT TOP (4) dept_name, budget
FROM project_dept
ORDER BY budget DESC;
Example 24.20
USE sample;
SELECT dept_name, budget
FROM (SELECT dept_name, budget,
RANK() OVER (ORDER BY budget DESC) AS rank_budget
FROM project_dept) part_dept
WHERE rank_budget <= 4;
Example 24.21
USE sample;
SELECT TOP (25) PERCENT WITH TIES emp_cnt, budget
FROM project_dept
ORDER BY emp_cnt ASC;
Example 24.22
USE sample;
UPDATE TOP (3) project_dept
SET budget = budget * 0.9
WHERE budget in (SELECT TOP (3) budget
FROM project_dept
ORDER BY budget desc);
Example 24.23
USE sample;
DELETE TOP (4)
FROM project_dept
WHERE budget IN
(SELECT TOP (4) budget FROM project_dept
ORDER BY budget ASC);
Example 24.24
USE sample;
SELECT date_month, budget, ROW_NUMBER()
OVER (ORDER BY date_month DESC, budget DESC) as row_no
FROM project_dept
ORDER BY date_month DESC, budget DESC
OFFSET 5 ROWS FETCH NEXT 4 ROWS ONLY;
Example 24.25
USE sample;
SELECT *, ROW_NUMBER()
OVER (ORDER BY date_month DESC, budget DESC) as row_no
FROM (SELECT date_month, budget
FROM project_dept
ORDER BY date_month DESC, budget DESC
OFFSET 5 ROWS FETCH NEXT 4 ROWS ONLY) c;
Example 24.26
USE sample;
SELECT dept_name, budget,
CASE NTILE(3) OVER (ORDER BY budget ASC)
WHEN 1 THEN 'Low'
WHEN 2 THEN 'Medium'
WHEN 3 THEN 'High'
END AS groups
FROM project_dept;
Example 24.27
USE sample;
SELECT budget, month(date_month) as month, year(date_month) as year
INTO project_dept_pivot
FROM project_dept;
Example 24.28
USE sample;
SELECT year,
SUM(CASE WHEN month = 1 THEN budget END ) AS January,
SUM(CASE WHEN month = 2 THEN budget END ) AS February,
SUM(CASE WHEN month = 7 THEN budget END ) AS July
FROM project_dept_pivot
GROUP BY year;
Example 24.29
USE sample;
SELECT year, [1] as January, [2] as February, [7] July FROM
(SELECT budget, year, month from project_dept_pivot) p2
PIVOT (SUM(budget) FOR month IN ([1],[2],[7])) AS P;
Example 24.30
USE sample;
CREATE TABLE project_dept_pvt (year int, January float, February float, July float);
INSERT INTO project_dept_pvt VALUES (2007, 80000, 110000, 75000);
INSERT INTO project_dept_pvt VALUES (2008, 50000, 80000, 30000);
--UNPIVOT the table
SELECT year, month, budget
FROM (SELECT year, January, February, July
FROM project_dept_pvt) p
UNPIVOT (budget FOR month IN (January, February, July)
)AS unpvt;
Example 24.31
USE AdventureWorks;
SELECT p.LastName, STRING_AGG(e.EmailAddress,';') Email_list
FROM person.person p JOIN person.EmailAddress e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE p.FirstName = 'Michael'
GROUP BY LastName;
Example 24.32
USE AdventureWorks;
SELECT p.LastName, STRING_AGG(e.EmailAddress,';')
WITHIN GROUP (ORDER BY EmailAddress) Email_list
FROM person.person p JOIN person.EmailAddress e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE p.FirstName = 'Michael'
GROUP BY LastName;