Mega Code Archive

 
Categories / MySQL Tutorial / Aggregate Functions
 

The SUM() and AVG() aggregate functions do not work with temporal values

To work around this problem, you can convert to numeric units, perform the aggregate operation, and convert back to a temporal value. SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name; mysql> mysql> CREATE TABLE Employee(     ->     id            int,     ->     first_name    VARCHAR(15),     ->     last_name     VARCHAR(15),     ->     start_date    DATE,     ->     end_date      DATE,     ->     salary        FLOAT(8,2),     ->     city          VARCHAR(10),     ->     description   VARCHAR(15)     -> ); Query OK, 0 rows affected (0.16 sec) mysql> mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)     ->              values (1,'Jason',    'Martin',  '19960725',  '20060725', 1234.56, 'Toronto',  'Programmer'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)     ->               values(2,'Alison',   'Mathews',  '19760321', '19860221', 6661.78, 'Vancouver','Tester'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)     ->               values(3,'James',    'Smith',    '19781212', '19900315', 6544.78, 'Vancouver','Tester'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)     ->               values(4,'Celia',    'Rice',     '19821024', '19990421', 2344.78, 'Vancouver','Manager'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)     ->               values(5,'Robert',   'Black',    '19840115', '19980808', 2334.78, 'Vancouver','Tester'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)     ->               values(6,'Linda',    'Green',    '19870730', '19960104', 4322.78,'New York',  'Tester'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)     ->               values(7,'David',    'Larry',    '19901231', '19980212', 7897.78,'New York',  'Manager'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)     ->               values(8,'James',    'Cat',     '19960917',  '20020415', 1232.78,'Vancouver', 'Tester'); Query OK, 1 row affected (0.00 sec) mysql> mysql> select * from Employee; +------+------------+-----------+------------+------------+---------+-----------+-------------+ | id   | first_name | last_name | start_date | end_date   | salary  | city      | description | +------+------------+-----------+------------+------------+---------+-----------+-------------+ |    1 | Jason      | Martin    | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto   | Programmer  | |    2 | Alison     | Mathews   | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester      | |    3 | James      | Smith     | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester      | |    4 | Celia      | Rice      | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager     | |    5 | Robert     | Black     | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester      | |    6 | Linda      | Green     | 1987-07-30 | 1996-01-04 | 4322.78 | New York  | Tester      | |    7 | David      | Larry     | 1990-12-31 | 1998-02-12 | 7897.78 | New York  | Manager     | |    8 | James      | Cat       | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester      | +------+------------+-----------+------------+------------+---------+-----------+-------------+ 8 rows in set (0.00 sec) mysql> mysql> SELECT FROM_DAYS(SUM(TO_DAYS(start_date))) FROM employee; +-------------------------------------+ | FROM_DAYS(SUM(TO_DAYS(start_date))) | +-------------------------------------+ | 0000-00-00                          | +-------------------------------------+ 1 row in set (0.00 sec) mysql> mysql> drop table Employee; Query OK, 0 rows affected (0.00 sec) mysql>