Cover | Table of Contents | Colophon
CREATE TABLE Pivot ( i INT, PRIMARY KEY(i) ) CREATE TABLE Foo( i CHAR(1) )
INSERT INTO Foo VALUES('0')
INSERT INTO Foo VALUES('1')
INSERT INTO Foo VALUES('2')
INSERT INTO Foo VALUES('3')
INSERT INTO Foo VALUES('4')
INSERT INTO Foo VALUES('5')
INSERT INTO Foo VALUES('6')
INSERT INTO Foo VALUES('7')
INSERT INTO Foo VALUES('8')
INSERT INTO Foo VALUES('9')INSERT INTO Pivot SELECT f1.i+f2.i+f3.i FROM Foo f1, Foo F2, Foo f3
CREATE TABLE Pivot ( i INT, PRIMARY KEY(i) ) CREATE TABLE Foo( i CHAR(1) )
INSERT INTO Foo VALUES('0')
INSERT INTO Foo VALUES('1')
INSERT INTO Foo VALUES('2')
INSERT INTO Foo VALUES('3')
INSERT INTO Foo VALUES('4')
INSERT INTO Foo VALUES('5')
INSERT INTO Foo VALUES('6')
INSERT INTO Foo VALUES('7')
INSERT INTO Foo VALUES('8')
INSERT INTO Foo VALUES('9')INSERT INTO Pivot SELECT f1.i+f2.i+f3.i FROM Foo f1, Foo F2, Foo f3
CREATE TABLE OrderItems( OrderId INTEGER, ItemId INTEGER, ProductId CHAR(10), Qty INTEGER, PRIMARY KEY(OrderId,ItemId) )
CREATE TABLE Students ( CourseId CHAR(20), StudentName CHAR(40), Score DECIMAL(4,2), TermPaper INTEGER )
CourseId StudentName Score TermPaper -------------------- --------------- ------ ----------- ACCN101 Andrew 15.60 4 ACCN101 Andrew 10.40 2 ACCN101 Andrew 11.00 3 ACCN101 Bert 13.40 1 ACCN101 Bert 11.20 2 ACCN101 Bert 13.00 3 ACCN101 Cindy 12.10 1 ACCN101 Cindy 16.20 2 MGMT120 Andrew 20.20 1 MGMT120 Andrew 21.70 2 MGMT120 Andrew 23.10 3 MGMT120 Cindy 12.10 1 MGMT120 Cindy 14.40 2 MGMT120 Cindy 16.00 3
SELECT s.CourseId, s.TermPaper
FROM Students s
WHERE s.StudentName='Andrew' AND
NOT EXISTS(
SELECT * FROM Students s1
WHERE s1.CourseId=s.CourseId AND
s1.TermPaper=s.TermPaper AND
s1.StudentName='Cindy')CourseId TermPaper --------- ----------- ACCN101 4 ACCN101 3
SELECT s.StudentName, s.CourseId, s.TermPaper
FROM Students s
WHERE s.StudentName<>'Cindy' AND
NOT EXISTS(
SELECT * FROM Students s1
WHERE s.CourseId=s1.CourseId AND
s.TermPaper=s1.TermPaper AND
s1.StudentName='Cindy')StudentName CourseId TermPaper ------------- --------- ----------- Andrew ACCN101 4 Andrew ACCN101 3 Bert ACCN101 3
CourseId StudentName Score TermPaper -------------------- -------------- ------ ----------- ACCN101 Andrew 11.00 3
CourseId StudentName Score TermPaper -------------------- ------------- ------ ----------- ACCN101 Andrew 11.00 3 ACCN101 Andrew 11.00 3 ACCN101 Bert 13.40 1
SELECT so.*, COUNT(*) DupeCount, 'StudentsOct' TableName
FROM StudentsOct so
GROUP BY so.CourseId, so.StudentName, so.Score, so.TermPaper
HAVING NOT EXISTS (
SELECT sn.*, COUNT(*)
FROM StudentsNov sn
GROUP BY sn.CourseId, sn.StudentName, sn.Score, sn.TermPaper
HAVING sn.CourseId=so.CourseId AND
sn.TermPaper=so.TermPaper AND
sn.StudentName=so.StudentName AND
COUNT(*) = COUNT(ALL so.CourseId))
UNION
SELECT sn.*, COUNT(*) DupeCount, 'StudentsNov' TableName
FROM StudentsNov sn
GROUP BY sn.CourseId, sn.StudentName, sn.Score, sn.TermPaper
HAVING NOT EXISTS (
SELECT so.*, COUNT(*)
FROM StudentsOct so
GROUP BY so.CourseId, so.StudentName, so.Score, so.TermPaper
HAVING so.CourseId=sn.CourseId AND
so.TermPaper=sn.TermPaper AND
so.StudentName=sn.StudentName AND
COUNT(*) = COUNT(ALL sn.CourseId))SELECT CourseId, TermPaper, COUNT(*) NumStudents FROM Students GROUP BY TermPaper, CourseId ORDER BY COUNT(*) DESC
SELECT CourseId, TermPaper, COUNT(*) NumStudents FROM Students GROUP BY TermPaper, CourseId HAVING COUNT(*) >= 2 ORDER BY COUNT(*) DESC
CourseId TermPaper NumStudents -------------------- ----------- ----------- ACCN101 2 3 ACCN101 1 2 ACCN101 3 2 MGMT120 1 2 MGMT120 2 2 MGMT120 3 2
SELECT CourseId, TermPaper FROM Students GROUP BY TermPaper, CourseId HAVING COUNT(*)=(SELECT COUNT(DISTINCT StudentName) FROM Students)
CourseId TermPaper -------------------- ----------- ACCN101 2
GROUP BY CourseId,
TermPaper clause does this for us.
|
Grade
|
Average score
|
|---|---|
|
A
|
22
|
|
B
|
19
|
|
C
|
16
|
|
D
|
13
|
|
E
|
10
|
SELECT CourseId, StudentName, AVG(Score) Score,(
CASE WHEN AVG(Score)>=22 THEN 'A'
WHEN AVG(Score)>=19 THEN 'B'
WHEN AVG(Score)>=16 THEN 'C'
WHEN AVG(Score)>=13 THEN 'D'
WHEN AVG(Score)>=10 THEN 'E'
ELSE 'F' END) Grade
FROM Students s
GROUP BY CourseId, StudentNameCourseId StudentName Score grade --------- ------------ ----- ----- ACCN101 Andrew 12.33 E MGMT120 Andrew 21.66 B ACCN101 Bert 12.53 E ACCN101 Cindy 14.15 D MGMT120 Cindy 14.16 D
SELECT s.StudentName,(
CASE WHEN s.Score>=22 THEN 'A'
WHEN s.Score>=19 THEN 'B'
WHEN s.Score>=16 THEN 'C'
WHEN s.Score>=13 THEN 'D'
WHEN s.Score>=10 THEN 'E'
ELSE 'F' END) Grade,
COUNT(*) NoOfPapers
FROM Students s
GROUP BY s.StudentName,
CASE WHEN s.Score>=22 THEN 'A'
WHEN s.Score>=19 THEN 'B'
WHEN s.Score>=16 THEN 'C'
WHEN s.Score>=13 THEN 'D'
WHEN s.Score>=10 THEN 'E'
ELSE 'F' END
ORDER BY s.StudentNameStudentName Grade NoOfPapers ----------- ----- ----------- Andrew A 1 Andrew B 2 Andrew D 1 Andrew E 2 Bert D 2 Bert E 1 Cindy C 2 Cindy D 1 Cindy E 2
StudentName Grade NoOfPapers ----------- ----- ----------- Andrew B Andrew B COUNT(*) 2 Bert D Bert D COUNT(*) 2
SELECT CourseId, MAX(l.s) Best ,MIN(l.s) Worst, MAX(l.s)-MIN(l.s) Spread FROM ( SELECT CourseId, AVG(Score) AS s FROM Students GROUP BY CourseId, StudentName) AS l GROUP BY CourseId
CourseId Best Worst Spread --------- ------ ------ --------- ACCN101 14.15 12.33 1.81 MGMT120 21.66 14.16 7.50
SELECT CourseId, MAX(AVG(stock)), MIN(AVG(stock)) FROM Students GROUP BY CourseId, studentsName
CourseId s -------------------- --------- ACCN101 12.333333 MGMT120 21.666666 ACCN101 12.533333 ACCN101 14.150000 MGMT120 14.166666
SELECT s.StudentName,(
CASE WHEN s.Score>=22 THEN 'A'
WHEN s.Score>=19 THEN 'B'
WHEN s.Score>=16 THEN 'C'
WHEN s.Score>=13 THEN 'D'
WHEN s.Score>=10 THEN 'E'
ELSE 'F' END) Grade,
COUNT(*) NoOfCourses
FROM (
SELECT CourseId, StudentName, AVG(Score) AS Score
FROM Students
GROUP BY CourseId, StudentName) AS s
GROUP BY s.StudentName,
CASE WHEN s.Score>=22 THEN 'A'
WHEN s.Score>=19 THEN 'B'
WHEN s.Score>=16 THEN 'C'
WHEN s.Score>=13 THEN 'D'
WHEN s.Score>=10 THEN 'E'
ELSE 'F' END
ORDER BY s.StudentNameStudentName Grade NoOfCourses ----------- ----- ----------- Andrew B 1 Andrew E 1 Bert E 1 Cindy D 2
SELECT StudentName,CourseId,
(SELECT MAX(TermPaper)
FROM Students
WHERE Score=MAX(s.Score)and
StudentName=s.StudentName and
CourseId=s.CourseId) TermPaper,
MAX(s.Score) Score
FROM Students s
GROUP BY CourseId, StudentNameStudentName CourseId TermPaper Score ------------ --------- ---------- ------ Andrew ACCN101 4 15.60 Andrew MGMT120 3 23.10 Bert ACCN101 1 13.40 Cindy ACCN101 2 16.20 Cindy MGMT120 3 16.00
SELECT StudentName, CourseId, TermPaper, MAX(Score) FROM Students s GROUP BY CourseId, StudentName
SELECT s1.StudentName, s1.CourseId, s1.TermPaper, MAX(s1.Score) Score
FROM Students s1
GROUP BY s1.CourseId, s1.StudentName, s1.TermPaper
HAVING MAX(s1.Score) IN
(SELECT TOP 2 s2.Score
FROM Students s2
WHERE s1.CourseId=s2.CourseId AND
s1.StudentName=s2.StudentName
ORDER BY s2.Score DESC)
ORDER BY s1.StudentName, s1.CourseId, s1.Score DESCSELECT s1.StudentName,s1.CourseId, s1.TermPaper, MAX(s1.Score) Score
FROM Students s1 INNER JOIN Students s2
ON s1.CourseId=s2.CourseId AND
s1.StudentName=s2.StudentName
GROUP BY s1.CourseId, s1.StudentName, s1.TermPaper
HAVING SUM(CASE WHEN s1.Score <= s2.Score THEN 1 END) <= 2
ORDER BY s1.StudentName, s1.CourseId, s1.Score DESCStudentName CourseId TermPaper Score ------------ --------- ---------- ------ Andrew ACCN101 4 15.60 Andrew ACCN101 3 11.00 Andrew MGMT120 3 23.10 Andrew MGMT120 2 21.70 Bert ACCN101 1 13.40 Bert ACCN101 3 13.00 Cindy ACCN101 2 16.20 Cindy ACCN101 1 12.10 Cindy MGMT120 3 16.00 Cindy MGMT120 2 14.40
SELECT s.StudentName, s.CourseId, 4-COUNT(TermPaper) Missing FROM Students s GROUP BY s.StudentName, s.CourseId ORDER BY s.StudentName
StudentName CourseId Missing ------------ --------- ----------- Andrew ACCN101 1 Andrew MGMT120 1 Bert ACCN101 1 Cindy ACCN101 2 Cindy MGMT120 1
SELECT s.StudentName, s.CourseId, f.i TermPaper
FROM Students s, Pivot f
WHERE f.i BETWEEN 1 AND 4
GROUP BY s.StudentName, s.CourseId, f.i
HAVING NOT EXISTS(
SELECT * FROM Students
WHERE CourseId=s.CourseId AND
StudentName=s.StudentName AND
TermPaper=f.i)
ORDER BY s.StudentNameStudentName CourseId TermPaper ------------ --------- ----------- Andrew ACCN101 1 Andrew MGMT120 4 Bert ACCN101 4 Cindy ACCN101 3 Cindy ACCN101 4 Cindy MGMT120 4
INSERT INTO Students(CourseId, StudentName, Score, TermPaper)
VALUES('ACCN101','David',0,0)CREATE TABLE CourseMaster( CourseId CHAR(20), numTermPapers INTEGER )
INSERT INTO CourseMaster VALUES('ACCN101',4)
INSERT INTO CourseMaster VALUES('MGMT120',3)SELECT s.StudentName, s.CourseId, f.i TermPaper
FROM Students s, Pivot f, CourseMaster c
WHERE f.i BETWEEN 1 AND c.numTermPapers
AND c.CourseId=s.CourseId
GROUP BY s.StudentName, s.CourseId, f.i
HAVING NOT EXISTS(
SELECT * FROM Students
WHERE CourseId=s.CourseId AND
StudentName=s.StudentName AND
TermPaper=f.i)
ORDER BY s.StudentNameStudentName CourseId TermPaper ------------ --------- ---------- Andrew ACCN101 1 Bert ACCN101 4 Cindy ACCN101 3 Cindy ACCN101 4
WHERE f.i BETWEEN 1 AND 4
SELECT s.StudentName, s.CourseId,
CASE WHEN COUNT(*)=MAX(c.numTermPapers)
THEN 'All submitted'
ELSE CONVERT(VARCHAR(8),MAX(c.numTermPapers)-COUNT(*))+' missing'
END status
FROM Students s JOIN CourseMaster c
ON s.CourseId=c.CourseId
GROUP BY s.StudentName, s.CourseId
ORDER BY s.StudentName, s.CourseIdStudentName CourseId status ------------ --------- ---------------- Andrew ACCN101 1 missing Andrew MGMT120 All submitted Bert ACCN101 1 missing Cindy ACCN101 2 missing Cindy MGMT120 All submitted
|
Course
|
Paper 1
|
Paper 2
|
Paper 3
|
|---|---|---|---|
|
ACCN101
|
A,C2
|
A,C2
|
A,B
|
|
MGMT120
|
C1
|
C1
|
C1,B
|
CREATE TABLE List ( Id INTEGER, ... )
CREATE TABLE ProductionLine ( ContainerId INTEGER, Purity INTEGER )
ContainerId Purity ----------- ----------- 1 100 2 100 3 101 4 102 5 103 6 100 7 103 8 108 9 109 10 100 11 100 12 100
CREATE TABLE ProductionFacility( Line INTEGER, ContainerId INTEGER, Purity INTEGER )