UsingFunctions SQL Server provides a number of functions you can use to get values from the database. For example, you can use the COUNT() function to get the number of rows in a table. The various functions are split into the categories shown in Table 4.2 . Table 4.2: FUNCTIONS FUNCTION CATEGORY DESCRIPTION Aggregate Return information based on one or more rows in a table. Mathematical Perform calculations. String Perform string manipulations. Date and time Work with dates and times. System Return information on SQL Server. Configuration Return information on the configuration of the server. Cursor Return information on cursors. Metadata Return information on the database and the various database items, such as tables. Security Return information on the database users and roles. System statistical Return statistical information on SQL Server. Text and image Perform text and image manipulations. You'll learn about the first five functions in the following sections. The other categories of functions are beyond the scope of this book, as they are of primary interest to database administrators. You can learn about those functions in the SQL Server Online Books documentation. Using Aggregate Functions Earlier, you saw the use of the COUNT() aggregate function to get the number of rows. COUNT() and some other aggregate functions you can use with SQL Server are listed in Table 4.3 . The expression you may pass to the aggregate functions is typically a single column, but it can also be a calculated field. ALL means that the function is applied to all the column values, while DISTINCT means that the function is applied only to unique values. ALL is the default. Table 4.3: AGGREGATE FUNCTIONS FUNCTION DESCRIPTION Table 4.3: AGGREGATE FUNCTIONS FUNCTION DESCRIPTION AVG([ ALL | DISTINCT ] expression) Returns the average of the values in a group. COUNT([ ALL | DISTINCT ] expression ] | *) Returns the number of rows in a group. COUNT() returns an int data type value. COUNT_BIG([ ALL | DISTINCT ] expression} | *) Returns the number of values in a group.COUNT_BIG()returns a bigint data type value MAX([ ALL | DISTINCT ] expression) Returns the highest value. MIN([ ALL | DISTINCT ] expression) Returns the lowest value. SUM([ ALL | DISTINCT ] expression) Returns the sum of any non-null values. SUM() can be used only with numeric expressions. STDEV(expression) Returns the standard deviation for all the values. STDEVP(expression) Returns the standard deviation for the population of all the values. VAR(expression) Returns the variance for all the values. VARP(expression) Returns the variance for the population of all the values. Let's consider examples that use some of the aggregate functions. You use the AVG() function to get the average value. For example, the following statement gets the average of the UnitPrice column of the Products table using the AVG() function: SELECT AVG(UnitPrice) FROM Products; This example returns 28.8663. Since ALL is the default used with functions, this example uses every row in the Products table when performing the calculation. If you wanted to just use unique values in the calculation, then you use the DISTINCT option, as shown in the following example: SELECT AVG(DISTINCT UnitPrice) FROM Products; This example returns 31.4162, slightly higher than the previous result because only unique values are used this time. In addition to passing a column to a function, you can also pass a calculated field. For example, the following statement passes the calculated field UnitPrice * 1.20 to the AVG() function: SELECT AVG(UnitPrice * 1.20) FROM Products; This example returns 34.639636; the average after the UnitPrice values have been increased 20 percent. You can limit the rows passed to a function using a WHERE clause. For example, the following SELECT statement calculates the average UnitPrice value for the rows with a CategoryID of 1: SELECT AVG(UnitPrice) FROM Products WHERE CategoryID = 1; This example returns 37.9791. You can combine a function with a GROUP BY clause to perform a calculation on each group of rows. For example, the following SELECT statement calculates the average UnitPrice value for each block of rows grouped by CategoryID: SELECT AVG(UnitPrice) FROM Products GROUP BY CategoryID; Figure 4.2 shows the results of this SELECT statement. Figure 4.2: Using the AVG() function to compute the average value of the UnitPrice column You can also supply a HAVING clause to eliminate groups used in a SELECT statement. For example, the following statement adds a HAVING clause to the previous example to eliminate the groups that have an average value greater than 50: SELECT AVG(UnitPrice) FROM Products GROUP BY CategoryID HAVING AVG(UnitPrice) > 50; This example returns 54.0066. Let's take a look at some of the other aggregate functions. You get the total number of rows using the COUNT() function. For example, the following statement gets the total number of rows in the Products table using the COUNT() function: SELECT COUNT(*) FROM Products; This example returns 77. You use the MAX() and MIN() functions to get the maximum and minimum values. For example, the following statement uses these functions to get the maximum and minimum UnitPrice: SELECT MAX(UnitPrice), MIN(UnitPrice) FROM Products; This example returns 263.5000 and 2.5000 for the respective maximum and minimum values. You use the SUM() function to get the total of any non-null values. For example, the following statement gets the sum of the UnitPrice column values for each group of rows using the SUM() function: SELECT SupplierID, SUM(UnitPrice) AS SumUnitPrice FROM Products GROUP BY SupplierID; The GROUP BY clause of this example returns one row for each block of rows with identical SupplierID column values. The SUM() function then adds up the UnitPrice column values for all the rows within each block and returns a single value. For example, SUM() returns 47.0000 for the group where the SupplierID is 1. This is the sum of the UnitPrice column values for all the rows where the SupplierID is 1. Similarly, SUM() returns 81.4000 where the SupplierID is 2, and so on. The AS clause in this example names the results returned by the SUM() function as SumUnitPrice. Figure 4.3 shows the results of this SELECT statement. Figure 4.3: Using the SUM() function to compute the total of the UnitPrice column Using Mathematical Functions The mathematical functions allow you to perform numerical operations, such as getting the absolute value of a number. Table 4.4 lists the mathematical functions available in SQL Server. The expression you may pass to the mathematical functions is typically a single column or value, but it can also be a calculated field. Table 4.4: MATHEMATICAL FUNCTIONS FUNCTION DESCRIPTION ABS(expression) Returns the absolute value of expression. This is always a positive number. ACOS(expression) Returns the arccosine of expression. ASIN(expression) Returns the arcsine of expression. ATAN(expression) Returns the arctangent of expression. ATN2(expression1, expression2) Returns the arctangent of the angle between expression1 and expression2. CEILING(expression) Returns the smallest integer greater than or equal to expression. Table 4.4: MATHEMATICAL FUNCTIONS FUNCTION DESCRIPTION COS(expression) Returns the cosine of expression. COT(expression) Returns the cotangent of expression. DEGREES(expression) Converts the supplied angle in radians to an angle in degrees. EXP(expression) Returns the exponential value of expression. FLOOR(expression) Returns the largest integer less than or equal to expression. LOG(expression) Returns the natural logarithm of expression. LOG10(expression) Returns the base-10 logarithm of expression. PI() Returns the mathematical constant Pi. POWER(expression, y) Returns the value of expression raised to the power y. RADIANS(expression) Converts the supplied angle in degrees to an angle in radians. RAND([expression]) Returns a random floating-point number between 0 and 1. The expression is an optional seed value that you may use to generate the random number. ROUND(expression, length [, function]) Returns the value of expression rounded or truncated to the number of decimal placed specified by length. The optional function is used to specify the type of operation to perform: 0 (the default) rounds the number, and any other value truncates the number. SIGN(expression) Returns 1, 0, or -1 depending on the sign of expression. Returns 1 for a positive number, 0 for zero, or -1 for a negative number. SIN(expression) Returns the sine of expression. SQUARE(expression) Returns the square of expression. SQRT(expression) Returns the square root of expression. TAN(expression) Returns the tangent of expression. Let's consider examples that use some of the mathematical functions. You use the ABS() function to get the absolute value. The following example returns 10 and 15: SELECT ABS(-10), ABS(15); You use the ACOS(), ASIN(), and ATAN() functions to get the arccosine, arcsine, and arctangent of a number. The following example returns 0.0, 1.5707963267948966, and 0.78539816339744828: SELECT ACOS(1), ASIN(1), ATAN(1); You use the CEILING() function to get the smallest integer greater than or equal to the value passed to it. The following example returns 2 and -1: SELECT CEILING(1.4), CEILING(-1.4); You use the FLOOR() function to get the largest integer less than or equal to the value passed to it. The following example returns 1 and -2: SELECT FLOOR(1.4), FLOOR(-1.4); You use the PI() function to get the mathematical constant Pi. The following example returns 3.1415926535897931: SELECT PI(); . mathematical functions. You use the ABS() function to get the absolute value. The following example returns 10 and 15 : SELECT ABS( -10 ), ABS (15 ); You use. returns 1 and -2: SELECT FLOOR (1. 4), FLOOR( -1. 4); You use the PI() function to get the mathematical constant Pi. The following example returns 3 .14 159265358979 31: