MySQL Aggregate Functions Without GROUP BY: Why and How
In MySQL, aggregate functions can be used in SELECT lists without specifying a GROUP BY clause, unlike other RDBMS such as SQL Server. This behavior, which may seem unexpected, is actually a deliberate design choice.
When an aggregate function is used without GROUP BY, MySQL treats the entire result set as a single group. This means that the aggregate function returns a single value for the entire table or subset specified in the query.
For example, the query SELECT col1,col2,sum(col3) FROM tbl1; returns a single row containing the first values of col1 and col2, along with the sum of all values in col3. This behavior can be useful in scenarios where you need to calculate summary statistics without grouping the data.
The behavior of aggregate functions without GROUP BY can be modified using the ONLY_FULL_GROUP_BY server SQL mode. By default, this mode is disabled in MySQL versions before 5.7.5. However, it can be enabled to disallow aggregate functions without GROUP BY.
To enable ONLY_FULL_GROUP_BY, add the following line to your MySQL configuration file (usually my.cnf):
sql-mode=ONLY_FULL_GROUP_BY
Once enabled, MySQL will throw an error for queries that use aggregate functions without GROUP BY. This can help ensure data integrity and prevent incorrect results.
The above is the detailed content of How Can I Use Aggregate Functions Without GROUP BY in MySQL?. For more information, please follow other related articles on the PHP Chinese website!