Spec-Zone.ru › MariaDB

Подзапросы в предложении FROM

Хотя подзапросы чаще размещаются в предложении WHERE, они также могут быть частью предложения FROM. Такие подзапросы обычно называются производными таблицами.

Если подзапрос используется таким образом, необходимо также использовать предложение AS для именования результата подзапроса.

Режим ORACLE

MariaDB начиная с 10.6.0

Начиная с MariaDB 10.6.0, безымянные подзапросы в предложении FROM (без предложения AS) разрешены в режиме ORACLE.

Примеры

CREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT); 

INSERT INTO student VALUES 
  ('Chun', 'SQL', 75), ('Chun', 'Tuning', 73), 
  ('Esben', 'SQL', 43), ('Esben', 'Tuning', 31), 
  ('Kaolin', 'SQL', 56), ('Kaolin', 'Tuning', 88), 
  ('Tatiana', 'SQL', 87), ('Tatiana', 'Tuning', 83);

Предположим, что, учитывая приведенные данные, вы хотите вернуть среднее значение общего балла для всех студентов. Другими словами, среднее значение баллов Чуна 148 (75+73), Эсбена 74 (43+31) и т.д.

Вы не можете сделать следующее:

SELECT AVG(SUM(score)) FROM student GROUP BY name;
ERROR 1111 (HY000): Invalid use of group function

Однако подзапрос в предложении FROM разрешен:

SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t;
+-------------+
| AVG(sq_sum) |
+-------------+
|    134.0000 |
+-------------+

Начиная с MariaDB 10.6 в режиме ORACLE, следующее разрешено:

SELECT * FROM (SELECT 1 FROM DUAL), (SELECT 2 FROM DUAL);
Контент, воспроизведенный на этом сайте, является собственностью соответствующих владельцев, и этот контент не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/subqueries-in-a-from-clause/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API