Counts and Totals
I N TE R M E D I AT E S Q L S E R V E R
Etibar Vazirov
CS instructor at UFAZ
Inspired by Ginger Grant’s slides
E xamining Totals with Counts
SELECT COUNT(*) FROM Incidents
+ +
|(No column name) |
+ +
|6452 |
+ +
INTERMEDIATE SQL SERVER
COUNT with DISTINCT
COUNT(DISTINCT COLUMN_NAME)
INTERMEDIATE SQL SERVER
COUNT with DISTINCT in T-SQL (I)
SELECT COUNT(DISTINCT Country) AS Countries
FROM Incidents
+ +
|Countries |
+ +
|3 |
+ +
INTERMEDIATE SQL SERVER
COUNT with DISTINCT in T-SQL (II)
SELECT COUNT(DISTINCT Country) AS Countries,
COUNT(DISTINCT City) AS Cities
FROM Incidents
+ + +
|Countries | Cities |
+ + +
|3 | 3566 |
+ + +
INTERMEDIATE SQL SERVER
COUNT AGGREGATION
GROUP BY can be used with COUNT() in the same way as the other aggregation functions
such as AVG() , MIN() , MAX()
Use the ORDER BY command to sort the values
ASC will return the smallest values f i rst (default)
DESC will return the largest values f i rst
INTERMEDIATE SQL SERVER
COUNT with GROUP BY in T-SQL
-- Count the rows, subtotaled by Country
SELECT COUNT(*) AS TotalRowsbyCountry, Country
FROM Incidents
GROUP BY Country
+ + +
|TotalRowsbyCountry | Country |
+ + +
|5452 |us |
|750 |NULL |
|249 |ca |
|1 |gb |
+ + +
INTERMEDIATE SQL SERVER
COUNT with GROUP BY and ORDER BY in T-SQL (I)
-- Count the rows, subtotaled by Country
SELECT COUNT(*) AS TotalRowsbyCountry, Country
FROM Incidents
GROUP BY Country
ORDER BY Country ASC
+ + +
|TotalRowsbyCountry | Country |
+ + +
|750 |NULL |
|249 |ca |
|1 |gb |
|5452 |us |
+ + +
INTERMEDIATE SQL SERVER
COUNT with GROUP BY and ORDER BY in T-SQL (II)
-- Count the rows, subtotaled by Country
SELECT COUNT(*) AS TotalRowsbyCountry,
Country FROM Incidents
GROUP BY Country
ORDER BY Country DESC
+ + +
|TotalRowsbyCountry | Country |
+ + +
|5452 |us |
|1 |gb |
|249 |ca |
|750 |NULL |
+ + +
INTERMEDIATE SQL SERVER
Column totals with SUM
SUM() provides a numeric total of the values in a column
It follows the same pattern as other aggregations
Combine it with GROUP BY to get subtotals based on columns specif i ed
INTERMEDIATE SQL SERVER
Adding column values in T-SQL
-- Calculate the values subtotaled by Country
SELECT SUM(DurationSeconds) AS TotalDuration, Country
FROM Incidents
GROUP BY Country
+ + +
|Country |TotalDuration |
+ + +
|us |17024946.750001565 |
|null |18859192.800000012 |
|ca |200975 |
|gb |120 |
+ + +
INTERMEDIATE SQL SERVER
Let's practice!
I N TE R M E D I AT E S Q L S E R V E R
Math with Dates
I N TE R M E D I AT E S Q L S E R V E R
Etibar
Ginger Vazirov
Grant
CS instructor at UFAZ
Instructor
Inspired by Ginger Grant’s slides
DATEPART
DATEPART is used to determine what part of the date you want to calculate. Some of the
common abbreviations are:
DD for Da y
MM for Month
YY for Year
HH for Hour
INTERMEDIATE SQL SERVER
Common date functions in T-SQL
DATEADD(): Add or subtract datetime values
Always returns a date
DATEDIFF() : Obtain the difference between two datetime values
Always returns a number
INTERMEDIATE SQL SERVER
DATEADD
To Add or subtract a value to get a new date use DATEADD()
DATEADD (DATEPART, number, date)
DATEPART : Unit of measurement (DD, MM etc .)
number : An integer value to add
date : A datetime value
INTERMEDIATE SQL SERVER
Date math with DATEADD (I)
What date is 30 da ys from J une 21, 2020?
SELECT DATEADD(DD, 30, '2020-06-21')
+ +
|(No Column Name) |
| +
|2020-07-21 00:00 |
+ +
INTERMEDIATE SQL SERVER
Date math with DATEADD (II)
What date is 30 da ys before J une 21, 2020?
SELECT DATEADD(DD, -30, '2020-06-21')
+ +
|(No Column Name) |
| +
|2020-05-22 00:00 |
+ +
INTERMEDIATE SQL SERVER
DATEDIFF
Returns a date af t er a number has been added or subtracted to a date
DATEDIFF (datepart, startdate, enddate)
datepart : Unit of measurement (DD, MM etc .)
startdate : The starting date value
enddate : An ending datetime value
INTERMEDIATE SQL SERVER
Date math with DATEDIFF
SELECT DATEDIFF(DD, '2020-05-22', '2020-06-21') AS Difference1,
DATEDIFF(DD, '2020-07-21', '2020-06-21') AS Difference2
+ + +
|Difference1 |Difference2 |
+ + +
|30 |-30 |
+ + +
INTERMEDIATE SQL SERVER
Let's practice!
I N TE R M E D I AT E S Q L S E R V E R
Rounding and
Truncating numbers
I N TE R M E D I AT E S Q L S E R V E R
Etibar
Ginger Vazirov
Grant
CS instructor at UFAZ
Instructor
Inspired by Ginger Grant’s slides
Rounding numbers in T-SQL
ROUND(number, length [,function])
INTERMEDIATE SQL SERVER
Rounding numbers in T-SQL
SELECT DurationSeconds,
ROUND(DurationSeconds, 0) AS RoundToZero,
ROUND(DurationSeconds, 1) AS RoundToOne
FROM Incidents
+ + + +
|DurationSeconds |RoundToZero |RoundToOne |
+ + + +
|121.6480 |122.0000 |121.6000 |
|170.3976 |170.0000 |170.4000 |
|336.0652 |336.0000 |336.1000 |
...
+ + + +
INTERMEDIATE SQL SERVER
Rounding on the left side of the decimal
SELECT DurationSeconds,
ROUND(DurationSeconds, -1) AS RoundToTen,
ROUND(DurationSeconds, -2) AS RoundToHundred
FROM Incidents
+ + + +
|DurationSeconds |RoundToTen |RoundToHundred |
+ + + +
|121.6480 |120.0000 |100.0000 |
|170.3976 |170.0000 |200.0000 |
|336.0652 |340.0000 |300.0000 |
...
+ + + +
INTERMEDIATE SQL SERVER
Truncating numbers
TRUNCATE ROUND
17.85 → 17 17.85 → 18
INTERMEDIATE SQL SERVER
Truncating with ROUND()
The ROUND() function can be used to truncate values when you specify the third argument
ROUND(number, length [,function])
Set the third value to a non-zero number
INTERMEDIATE SQL SERVER
Truncating in T-SQL
SELECT Profit,
ROUND(DurationSeconds, 0) AS RoundingtoWhole,
ROUND(DurationSeconds, 0, 1) AS Truncating
FROM Incidents
+ + + +
|Profit |RoundingtoWhole |Truncating |
+ + + +
|15.6100 |16.0000 |15.0000 |
|13.2444 |13.0000 |13.0000 |
|17.9260 |18.0000 |17.0000 |
...
+ + + +
Truncating just cuts all numbers off af t er the specif i ed digit
INTERMEDIATE SQL SERVER
Let's practice!
I N TE R M E D I AT E S Q L S E R V E R
More math functions
I N TE R M E D I AT E S Q L S E R V E R
Etibar
Ginger Vazirov
Grant
CS instructor at UFAZ
Instructor
Inspired by Ginger Grant’s slides
Absolute value
Use ABS() to return non-negative values
ABS(number)
INTERMEDIATE SQL SERVER
Using ABS in T-SQL (I)
SELECT ABS(-2.77), ABS(3), ABS(-2)
+ + + +
|(No column name) |(No column name) |(No column name) |
+ + + +
|2.77 |3 |2 |
+ + + +
INTERMEDIATE SQL SERVER
Using ABS in T-SQL (II)
SELECT DurationSeconds, ABS(DurationSeconds) AS AbsSeconds
FROM Incidents
+ + +
|DurationSeconds |AbsSeconds |
+ + +
|-25.36 |25.36 |
|-258482.44 |258482.44 |
|45.66 |45.66 |
+ + +
INTERMEDIATE SQL SERVER
Squares and square roots in T-SQL
SELECT SQRT(9) AS Sqrt,
SQUARE(9) AS Square
+ + +
|Sqrt |Square |
+ +
|3 |81 |
+ + +
INTERMEDIATE SQL SERVER
Logs
LOG() returns the natural logarithm
Optionally, you can set the base, which if not set is 2.718281828
LOG(number [,Base])
INTERMEDIATE SQL SERVER
Calc ulating logs in T-SQL
SELECT DurationSeconds, LOG(DurationSeconds, 10) AS LogSeconds
FROM Incidents
+ + +
|DurationSeconds |LogSeconds |
+ + +
|37800 |4.577491799837225 |
|5 |0.6989700043360187 |
|20 |1.301029995663981 |
...
+ + +
INTERMEDIATE SQL SERVER
Log of 0
You cannot take the log of 0 as it will give you an error
SELECT LOG(0, 10)
An invalid floating point operation occurred.
INTERMEDIATE SQL SERVER
Let's practice!
I N TE R M E D I AT E S Q L S E R V E R