Что из этих ответов на этот sql-запрос является более правильным в соответствии со спецификацией sql?

Что из этих ответов на этот sql-запрос является более правильным в соответствии со спецификацией sql?

Вот ответ от более поздней версии mysql

C:wampbinmysqlmysql5.7.11bin>mysql.exe --version
mysql.exe  Ver 14.14 Distrib 5.7.11, for Win32 (AMD64)

mysql> select * from blah6;
+------+------+
| col1 | col2 |
+------+------+
|    6 |    8 |
|    7 |    8 |
|    9 |    3 |
|    6 |    3 |
+------+------+
4 rows in set (0.01 sec)

mysql> select sum(col1),col2 from blah6;
+-----------+------+
| sum(col1) | col2 |
+-----------+------+
|        28 |    8 |
+-----------+------+
1 row in set (0.00 sec)

mysql>

против

Здесь ответ от более ранней версии mysql

C:wampmysqlbin>mysql.exe --version
mysql.exe  Ver 14.12 Distrib 5.0.27, for Win32 (ia32)

mysql> select * from asdf2;
+------+------+
| col1 | col2 |
+------+------+
|    5 |    6 |
|    9 |    3 |
|   29 |   13 |
|   44 |   13 |
|   44 |   53 |
|    5 |   33 |
+------+------+
6 rows in set (0.00 sec)

mysql> select sum(col1),col2 from asdf2;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

1 ответ

  1. Комментарии охватывают существенные моменты: первый является (mis)особенностью в MySQL, которая вызывает путаницу и обычно поощряет плохие практики кодирования. Ошибка является правильным поведением.

    Я хочу отметить, что это не имеет ничего общего с версией MySQL. Оба работают одинаково. Вопрос в том, задана ли модельONLY_FULL_GROUP_BY. Когда этот режим установлен, то MySQL лучше следует стандарту ANSI для запросов агрегации (читайте об этом здесь ).

    Примечание: этот режим может быть установлен с помощью более полного ANSIрежима.