×
Clear all filters including search bar
Valeri Tandilashvili's Personal Professional Blog
LTRIM remove leading spaces (removes spaces from the beginning)SELECT
LENGTH(' text ') length,
LENGTH(LTRIM(' text ')) length_with_left_trimRTRIM removes trailing spaces (removes spaces from the end)SELECT
LENGTH(' text ') length,
LENGTH(RTRIM(' text ')) length_with_right_trimTRIM removes leading and trailing spacesSELECT
LENGTH(' text ') length,
LENGTH(TRIM(' text ')) length_with_trimLENGTH Returns the length (in bytes) SELECT
id,
first_name,
LENGTH(first_name) first_name_length
FROM students
Note: Each Georgian letter takes three bytesSELECT
CONCAT(first_name, ' ', 'joins', ' ', 'strings', ' ', 'and', ' ', 'columns')
FROM students
Note: If the function parameter is not surrounded by quotation marks, then the parameter is going to be interpreted as a column valuelower-case SELECT
LOWER(first_name),
LOWER('Converts a string or column value to lower-case')
FROM studentsUPPER-CASE SELECT
UPPER(first_name),
UPPER('Converts a string or column value to UPPER-CASE')
FROM studentsGROUP BY groups the rows that have the same values in some columns.
In this example, we group all students with the same last name and count them for individual unique last namesSELECT last_name, COUNT(*)
FROM students
GROUP BY last_name
Calculates average points for each unique last nameSELECT last_name, AVG(points)
FROM students
GROUP BY last_name
Returns unique last name and first name, meaning, if there are two rows with the exact same first names and last names, it will be appeared onceSELECT
first_name,
last_name
FROM students
GROUP BY first_name, last_nameThe query returns the same result using DISTINCT keyword as the above querySELECT DISTINCT
first_name,
last_name
FROM students
If we want to filter the aggregated data, it's not possible to use WHERE clause, because WHERE runs before running GROUP BY clauseSELECT
last_name,
AVG(points) average_points
FROM students
WHERE average_points > 70
GROUP BY last_nameThe query gives the following error: Unknown column 'average_points' in 'where clause'
Instead, we need to use HAVING because it's specifically designed to filter data after running GROUP BY clause:SELECT
last_name,
AVG(points) average_points
FROM students
GROUP BY last_name
HAVING average_points > 70sub-query for INSERT statement.
Before inserting the record, sub-query gets gender_id based on the provided gender nameINSERT INTO students (
first_name,
last_name,
points,
gender_id
)
VALUES (
'ილია',
'დავითაშვილი',
'84',
(SELECT id FROM genders WHERE name = 'Male')
)COUNT of all rows of the students tableSELECT COUNT(*) AS students_count
FROM students
Returns minimum points from students tableSELECT MIN(points) AS minimum_points
FROM students
Returns maximum points from students tableSELECT MAX(points) AS maximum_points
FROM students
Returns average points from students tableSELECT AVG(points) AS average_points
FROM students
Returns SUM of all students pointsSELECT SUM(points) AS 'sum of all points'
FROM students
Aggregate functions behaves differently when there is any number of additional columns with any of the aggregate functions in SELECT clause.
GROUP BY clause is needed when there is any additional column from the table.
In this example rows are grouped by last_name and the value that SUM function returns is aggregated.
We get all the unique last names with its aggregated pointsSELECT last_name, SUM(points) AS 'sum of all points'
FROM students
GROUP BY last_name
We can do the same for all the other aggregated functions
Complete list of aggregate functions: https://dev.mysql.com/doc/refman/5.6/en/aggregate-functions.html