{"id":463602,"date":"2025-06-17T09:00:21","date_gmt":"2025-06-17T09:00:21","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=463602"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=463602","title":{"rendered":"<span>\u0423\u0447\u0438\u043c\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u044c SQL SELECT<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<ol>\n<li>\n<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0411\u0414<\/p>\n<\/li>\n<li>\n<p>SELECT-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/p>\n<ol>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 FROM<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 JOIN<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 WHERE<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 GROUP BY<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 HAVING<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ORDER BY<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b OFFSET \u0438 LIMIT<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SELECT<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u0437\u0435\u043c\u043b\u044f\u0435\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u043a\u043e\u0434<\/p>\n<\/li>\n<li>\n<p>SELECT-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0441\u0442\u0440\u043e\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ol>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u042f \u043e\u0442\u0447\u0451\u0442\u043b\u0438\u0432\u043e \u043f\u043e\u043c\u043d\u044e, \u043a\u0430\u043a \u0441\u0438\u0434\u0435\u043b \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u043a\u0443\u0440\u0441\u0435 \u043d\u0430 \u043b\u0430\u0431\u0430\u0445 \u043f\u043e \u0411\u0414 \u0438 \u0434\u043e\u043b\u0433\u043e \u0438 \u043c\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043d\u0430\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u044b\u043a\u0430 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u043b \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0432 \u0432 SELECT-\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0441 GROUP BY, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u0435\u0440\u043d\u0443\u043b \u043d\u0443\u0436\u043d\u044b\u0439 <s>\u043c\u043d\u0435<\/s> \u043f\u0440\u0435\u043f\u043e\u0434\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 SELECT, \u0445\u043e\u0442\u044f \u0431\u044b\u043b \u043f\u0440\u0438\u043b\u0435\u0436\u043d\u044b\u043c (\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0441\u043a\u0438\u0445 \u043a\u0443\u0440\u0441\u0430\u0445) \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u043c, \u0445\u043e\u0434\u0438\u043b \u043d\u0430 \u0432\u0441\u0435 \u043b\u0435\u043a\u0446\u0438\u0438 \u0438 \u0434\u0435\u043b\u0430\u043b \u043b\u0430\u0431\u044b \u0437\u0430 \u0441\u0435\u0431\u044f \u0438 \u043f\u0430\u0440\u0443 &#171;\u0442\u0435\u0445 \u043f\u0430\u0440\u043d\u0435\u0439&#187;.<\/p>\n<p>\u0414\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043b\u0435\u0442 \u0441\u043f\u0443\u0441\u0442\u044f, \u043a\u043e\u0433\u0434\u0430 \u044f \u0432\u0441\u0442\u0430\u043b \u043f\u043e \u0442\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0431\u0430\u0440\u0440\u0438\u043a\u0430\u0434 \u0438 \u043d\u0430\u0447\u0430\u043b \u0441\u0430\u043c \u0432\u0435\u0441\u0442\u0438 \u043b\u0430\u0431\u044b \u043f\u043e \u0411\u0414, \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0443\u0436\u0435 \u0443 \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432. \u0418, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043b\u0435\u0442 \u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u043e\u043d\u044f\u043b, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 SELECT, \u0442\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0434\u043b\u044f \u043d\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e (\u0432 \u043c\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435).<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">SELECT e.id,        e.name || ', \u043f\u0430\u0441\u043f\u043e\u0440\u0442: ' || e.passport as name,        sum(de.training_budget) as sum,        array_agg(d.name || ' - ' || de.training_budget) as details FROM employees e          JOIN department_employees de on e.id = de.employee_id          JOIN departments d on de.department_id = d.id WHERE d.location = '\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a' GROUP BY e.id HAVING sum(de.training_budget) &gt; 80000 ORDER BY sum(training_budget) desc OFFSET 1 LIMIT 1;<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u2014 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0434\u0430\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0432\u0432\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u0432 SQL \u0438 \u043e\u043d \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e \u0441 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c SQL.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <\/strong>\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 <strong>\u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0421\u0423\u0411\u0414 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442 SELECT-\u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/strong>. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0438 \u043d\u0435\u043f\u043e\u043b\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443.<\/p>\n<p>\u041d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 <strong>\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438<\/strong> SELECT-\u0430 \u0435\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u0442\u0435 \u041b\u0443\u043a\u0430\u0441\u0430 \u042d\u0434\u0430\u0440\u0430 <a href=\"https:\/\/blog.jooq.org\/a-beginners-guide-to-the-true-order-of-sql-operations\/\" rel=\"noopener noreferrer nofollow\">A Beginner\u2019s Guide to the True Order of SQL Operations<\/a>, \u0430 \u043f\u0440\u043e \u0442\u043e \u043a\u0430\u043a \u0421\u0423\u0411\u0414 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043a\u043d\u0438\u0433\u0435 <a href=\"https:\/\/postgrespro.ru\/education\/books\/internals\" rel=\"noopener noreferrer nofollow\">PostgreSQL 17 \u0438\u0437\u043d\u0443\u0442\u0440\u0438<\/a> \u043e\u0442 \u0440\u0435\u0431\u044f\u0442 \u0438\u0437 Postgres Professional.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u2014 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0411\u0414, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0431\u0443\u0434\u0443 \u0435\u0433\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h2>\u0421\u0445\u0435\u043c\u0430 \u0411\u0414<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0411\u0414:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/745\/4bb\/b74\/7454bbb7465005d67d89ce795303d44d.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0411\u0414\" title=\"\u0421\u0445\u0435\u043c\u0430 \u0411\u0414\" width=\"762\" height=\"139\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/745\/4bb\/b74\/7454bbb7465005d67d89ce795303d44d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/745\/4bb\/b74\/7454bbb7465005d67d89ce795303d44d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0411\u0414<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"sql\">CREATE TABLE employees (     id       BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,     passport NUMERIC(10)  NOT NULL UNIQUE,     name     VARCHAR(256) NOT NULL CHECK (length((name)) &gt; 3) );  CREATE TABLE departments (     id       BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,     name     VARCHAR NOT NULL,     location VARCHAR NOT NULL );  CREATE TABLE department_employees (     department_id   BIGINT REFERENCES departments,     employee_id     BIGINT REFERENCES employees,     training_budget NUMERIC(8, 2),     PRIMARY KEY (department_id, employee_id) );<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u0438\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u0438 \u043e\u0442\u0434\u0435\u043b\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u043c\u043d\u043e\u0433\u0438\u0435-\u043a\u043e-\u043c\u043d\u043e\u0433\u0438\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u0440\u0430\u0434\u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u0445\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b departments \u0434\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u043e\u0432 \u0438 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 SELECT-\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<h2>SELECT-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e SELECT-\u0437\u0430\u043f\u0440\u043e\u0441 \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u00ab\u041f\u043e\u0441\u0442\u0430\u043c\u0438\u00bb \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f SQL-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u043a-\u0442\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e \u00ab\u043f\u043e\u0441\u0442\u044b\u00bb\/\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u2014 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <strong>\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/strong>.<\/p>\n<p>\u041d\u043e, \u0432\u043e\u043f\u0440\u0435\u043a\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 SELECT-\u0430, \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 SELECT, \u0430 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 FROM.<\/p>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 FROM<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 FROM, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u2014 \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u0441\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0432 FROM \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u043e\u043d \u0432\u044b\u0434\u0430\u0441\u0442 \u0438\u0445 CROSS JOIN (\u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435). \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u043e\u0432\u043d\u043e \u0442\u043e\u0433\u043e \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0438 JOIN-\u0430\u043c\u0438 \u2014 \u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0443 \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0435\u0451 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36d\/2a8\/c32\/36d2a8c3284847f392c0ff2549501eb2.png\" alt=\"\u041f\u043e\u0441\u0442 FROM\" title=\"\u041f\u043e\u0441\u0442 FROM\" width=\"507\" height=\"534\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/36d\/2a8\/c32\/36d2a8c3284847f392c0ff2549501eb2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36d\/2a8\/c32\/36d2a8c3284847f392c0ff2549501eb2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442 FROM<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 JOIN<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 JOIN. \u0423 JOIN-\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f CROSS, INNER, LEFT, RIGHT \u0438 FULL.<\/p>\n<p>\u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u0432 SQL SELECT \u0432 \u0446\u0435\u043b\u043e\u043c, \u0430 \u043f\u043e\u0441\u0442 \u043f\u0440\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u0438 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u043d\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u2014 INNER JOIN.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 JOIN-\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0451 \u0443 \u0442\u043e\u0433\u043e \u0436\u0435 \u041b\u0443\u043a\u0430\u0441\u0430 \u042d\u0434\u0430\u0440\u0430 \u0432 \u043f\u043e\u0441\u0442\u0430\u0445 <a href=\"https:\/\/blog.jooq.org\/say-no-to-venn-diagrams-when-explaining-joins\/\" rel=\"noopener noreferrer nofollow\">Say NO to Venn Diagrams When Explaining JOINs<\/a> \u0438 <a href=\"https:\/\/blog.jooq.org\/a-probably-incomplete-comprehensive-guide-to-the-many-different-ways-to-join-tables-in-sql\/\" rel=\"noopener noreferrer nofollow\">A Probably Incomplete, Comprehensive Guide to the Many Different Ways to JOIN Tables in SQL<\/a>.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 INNER JOIN \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0432\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u043e\u0434\u043d\u0443 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u00ab\u043f\u043e\u0441\u0442\u0430\u00bb \u0438 \u043e\u0434\u043d\u0443 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437\u0432\u043d\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430. \u041e\u0431\u0435 \u044d\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0441\u0445\u0435\u043c\u0435 \u0411\u0414, \u0442\u0430\u043a \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438\/\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u043c\u0438\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u044b\u0448\u0435 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0438\u043b\u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0418 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 JOIN \u0441\u0442\u0440\u043e\u0438\u0442 \u043e\u0434\u043d\u0443. \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446. \u0410 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u2014 \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, INNER JOIN \u2014 \u044d\u0442\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u043e\u0431\u0435\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b \u0441\u0442\u0440\u043e\u043a \u0438 \u2014 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u043e \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438 \u0441\u0430\u043c\u044b\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 JOIN-\u043e\u0432 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0421\u0423\u0411\u0414 \u2014 FOR LOOP JOIN. \u0414\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0438\u0434\u0430 \u2014 HASH JOIN \u0438 MERGE JOIN. HASH JOIN \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043e\u0434\u043d\u0430 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043c\u0435\u0449\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. \u0410 MERGE JOIN \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p align=\"left\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 JOIN-\u043e\u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u0441\u0451 \u0432 \u0442\u043e\u0439 \u0436\u0435 &#171;PostgreSQL 17 \u0438\u0437\u043d\u0443\u0442\u0440\u0438&#187;.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u043e\u0434\u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0439\u0442\u0438 \u0432\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435) \u043f\u0430\u0440, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u00ab\u041c\u0430\u0441\u043b\u043e\u0432\u0430\u00bb \u0438 \u00ab\u041f\u043e\u0437\u0434\u043d\u044f\u043a\u043e\u0432\u00bb, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043f\u043e \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <code>department_employees<\/code>.<\/p>\n<p>\u041d\u0430 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 JOIN \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b3\/52b\/b3e\/1b352bb3e500479cbacf78ecee4357c0.png\" alt=\"\u041f\u043e\u0441\u0442 JOIN department_employees\" title=\"\u041f\u043e\u0441\u0442 JOIN department_employees\" width=\"966\" height=\"817\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/1b3\/52b\/b3e\/1b352bb3e500479cbacf78ecee4357c0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b3\/52b\/b3e\/1b352bb3e500479cbacf78ecee4357c0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442 JOIN department_employees<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36f\/cd3\/12c\/36fcd312c22afa9f903801872fc7420c.png\" alt=\"\u041f\u043e\u0441\u0442 JOIN departments\" title=\"\u041f\u043e\u0441\u0442 JOIN departments\" width=\"966\" height=\"685\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/36f\/cd3\/12c\/36fcd312c22afa9f903801872fc7420c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/36f\/cd3\/12c\/36fcd312c22afa9f903801872fc7420c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442 JOIN departments<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 WHERE<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 WHERE \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0432 SQL. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u0447\u0442\u043e \u0438 \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0438 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u2014 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u00ab\u043f\u043e\u0441\u0442\u00bb \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b82\/b25\/296\/b82b252962cd16b98bbc35f96e629881.png\" alt=\"\u041f\u043e\u0441\u0442 WHERE\" title=\"\u041f\u043e\u0441\u0442 WHERE\" width=\"966\" height=\"727\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b82\/b25\/296\/b82b252962cd16b98bbc35f96e629881.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b82\/b25\/296\/b82b252962cd16b98bbc35f96e629881.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442 WHERE<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 GROUP BY<\/h3>\n<p>\u0410 \u0432\u043e\u0442 GROUP BY \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e GROUP BY \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0434\u0430\u0436\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435. \u0410 \u041a\u043e\u0434\u0434 \u2014 \u0430\u0432\u0442\u043e\u0440 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u2014 \u0432\u0432\u0451\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438 (<em>&#171;with the objective of making the collection of relations easier to understand and control, simpler to operate upon, and more informative to the casual user&#187;<\/em> \u2014 <a href=\"https:\/\/forum.thethirdmanifesto.com\/wp-content\/uploads\/asgarosforum\/987737\/00-efc-further-normalization.pdf\" rel=\"noopener noreferrer nofollow\">FURTHER NORMALIZATION OF THE DATA BASE RELATIONAL MODEL<\/a>).<\/p>\n<p>GROUP BY \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u0442\u043e\u0436\u0435 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0441 \u0442\u0435\u043c \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u043d\u043e \u044d\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0443\u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0434\u0432\u0430 \u043d\u0430\u0431\u043e\u0440\u0430. \u0410 \u0441\u0442\u0440\u043e\u043a GROUP BY \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%80%D1%82%D0%B5%D0%B6_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0440\u0442\u0435\u0436\u0430<\/a> \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<p>\u0414\u0432\u0443\u043c\u044f \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0438 \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. \u0413\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u2014 \u044d\u0442\u043e \u0442\u0435, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435 GROUP BY, \u0430 \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u2014 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0413\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u0438 \u0441 \u043d\u0438\u043c\u0438 \u0434\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441 \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u2014 \u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435, \u043d\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438 \u0432\u044b\u0434\u0430\u0442\u044c \u043d\u0430\u0440\u0443\u0436\u0443. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u0435 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u0418 \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043b\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u043c\u0430\u044f GROUP BY, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043a\u0430\u043b\u044f\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u0441\u043a\u0430\u043b\u044f\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (count, min, avg, array_agg \u0438 \u0442.\u0434.).<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u00ab\u043f\u043e\u0441\u0442\u00bb GROUP BY \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b6d\/b6c\/04a\/b6db6c04a51744027b2f50b9a6389aac.png\" alt=\"\u041f\u043e\u0441\u0442 GROUP BY\" title=\"\u041f\u043e\u0441\u0442 GROUP BY\" width=\"966\" height=\"701\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b6d\/b6c\/04a\/b6db6c04a51744027b2f50b9a6389aac.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b6d\/b6c\/04a\/b6db6c04a51744027b2f50b9a6389aac.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442 GROUP BY<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 HAVING<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 HAVING \u2014 \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 WHERE, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 HAVING \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c (<code>HAVING id BETWEEN 2 AND 4<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440), \u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u2014 \u0434\u0430\u043b\u0435\u0435 \u0432 \u043f\u043e\u0441\u0442\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, HAVING \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e WHERE \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 (\u0440\u0430\u0437\u0431\u0438\u0442\u044b\u043c\u0438 \u043d\u0430 \u0434\u0432\u0435 \u0433\u0440\u0443\u043f\u043f\u044b) \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u0443\u0441\u043b\u043e\u0432\u0438\u044e.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u00ab\u043f\u043e\u0441\u0442\u00bb HAVING \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/87e\/f13\/402\/87ef1340278356a0ed7f958e37b578bc.png\" alt=\"\u041f\u043e\u0441\u0442 HAVING\" title=\"\u041f\u043e\u0441\u0442 HAVING\" width=\"966\" height=\"650\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/87e\/f13\/402\/87ef1340278356a0ed7f958e37b578bc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/87e\/f13\/402\/87ef1340278356a0ed7f958e37b578bc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442 HAVING<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ORDER BY<\/h3>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0438 SQL, \u043d\u0438 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0421\u0423\u0411\u0414 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0442 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0410 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ORDER BY \u0442\u043e\u0436\u0435 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u043e\u0434\u0435 \u0447\u0438\u0442\u0435\u0440 \u2014 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u043a. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043e\u043d \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043e\u043a. \u0418 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, &#171;\u043f\u043e\u0441\u0442&#187; ORDER BY \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b09\/1f9\/a33\/b091f9a336e6db0e8b17158b214bce61.png\" alt=\"\u041f\u043e\u0441\u0442 ORDER BY\" title=\"\u041f\u043e\u0441\u0442 ORDER BY\" width=\"969\" height=\"546\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b09\/1f9\/a33\/b091f9a336e6db0e8b17158b214bce61.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b09\/1f9\/a33\/b091f9a336e6db0e8b17158b214bce61.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442 ORDER BY<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b OFFSET \u0438 LIMIT<\/h3>\n<p>\u042d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u043f\u043e \u0441\u0443\u0442\u0438 \u2014 \u0442\u0440\u0435\u0442\u044c\u044f \u0438\u043f\u043e\u0441\u0442\u0430\u0441\u044c WHERE \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u043a\u0430\u0445, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u043e\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 ORDER BY, \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438. \u0410 \u0432\u043e\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u0447\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0444\u0441\u0435\u0442\u0430 (\u0438\u043b\u0438 \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0435\u0441\u043b\u0438 \u043e\u0444\u0441\u0435\u0442 \u044f\u0432\u043d\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u043d), \u0438 \u043e\u0431\u0449\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c, \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043b\u0438\u043c\u0438\u0442\u0430 (\u0438\u043b\u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0438, \u0435\u0441\u043b\u0438 \u043b\u0438\u043c\u0438\u0442 \u044f\u0432\u043d\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u043d).<\/p>\n<p>\u042d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0441\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u00ab\u043f\u043e\u0441\u0442\u0430\u00bb, \u043d\u043e \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u00ab\u0441\u0440\u0435\u0436\u0443 \u0443\u0433\u043e\u043b\u00bb \u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u0434\u0435\u043b\u0430\u044e \u0438\u0445 \u043e\u0434\u043d\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3ec\/411\/907\/3ec4119070dde88145988621a701037d.png\" alt=\"\u041f\u043e\u0441\u0442\u044b OFFSET \u0438 LIMIT\" title=\"\u041f\u043e\u0441\u0442\u044b OFFSET \u0438 LIMIT\" width=\"969\" height=\"449\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/3ec\/411\/907\/3ec4119070dde88145988621a701037d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3ec\/411\/907\/3ec4119070dde88145988621a701037d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442\u044b OFFSET \u0438 LIMIT<\/figcaption><\/div>\n<\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e OFFSET+LIMIT \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c. <a href=\"https:\/\/use-the-index-luke.com\/sql\/partial-results\/fetch-next-page\" rel=\"noopener noreferrer nofollow\">\u041b\u0443\u0447\u0448\u0435 \u0442\u0430\u043a \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c<\/a>.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SELECT<\/h3>\n<p>\u041d\u0443 \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 (\u0432 \u043d\u0430\u0448\u0435\u0439 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438) \u00ab\u043f\u043e\u0441\u0442\u00bb SELECT. \u041e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0434\u0430\u0451\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0442\u0435\u043c \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u0440\u043e\u043a, \u043d\u043e (\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e) \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0421 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 SELECT \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0440\u0438 \u0432\u0435\u0449\u0438:<\/p>\n<ol>\n<li>\n<p>\u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u044f\u0432\u043d\u043e \u043d\u0435\u0443\u043a\u0430\u0437\u0430\u043d \u0432 SELECT-\u0435 \u2014 \u043e\u043d \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430;<\/p>\n<\/li>\n<li>\n<p>\u00ab\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u00bb \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (\u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440).<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u00ab\u043f\u043e\u0441\u0442\u00bb \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af7\/90f\/604\/af790f6047856a98bc4238d67cb83f3a.png\" alt=\"\u041f\u043e\u0441\u0442 SELECT\" title=\"\u041f\u043e\u0441\u0442 SELECT\" width=\"969\" height=\"528\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/af7\/90f\/604\/af790f6047856a98bc4238d67cb83f3a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af7\/90f\/604\/af790f6047856a98bc4238d67cb83f3a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0441\u0442 SELECT<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b:<\/p>\n<ol>\n<li>\n<p>\u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b;<\/p>\n<\/li>\n<li>\n<p>&#171;\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c&#187; \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b de.training_budget \u0438 d.name \u0432 \u0441\u0443\u043c\u043c\u0443 \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u0435\u0451 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0443 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u0430\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0441 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0435\u0439 \u0438\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430.<\/p>\n<\/li>\n<\/ol>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u0443 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441: \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <a href=\"http:\/\/e.name\" rel=\"noopener noreferrer nofollow\"><code>e.name<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c, \u0431\u0435\u0437 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438?<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 SQL:1999 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0432 GROUP BY \u2014 \u0435\u0441\u043b\u0438 \u0432\u044b \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u043c\u0443 \u0438\u043b\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443, \u0442\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0435.<\/p>\n<p>\u041d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043e \u0438\u043c\u044f \u0435\u0451 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u0446\u0435\u043b\u044f\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442, \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u00ab\u043f\u0440\u043e\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u0430\u00bb (pushed) \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0435 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 FROM.<\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043b\u0430\u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430:<br \/><code>EXPLAIN ANALYZE SELECT <\/code><a href=\"http:\/\/e.id\" rel=\"noopener noreferrer nofollow\"><code>e.id<\/code><\/a><code><br \/>                 FROM employees e<br \/>                      JOIN department_employees de on <\/code><a href=\"http:\/\/e.id\" rel=\"noopener noreferrer nofollow\"><code>e.id<\/code><\/a><code> = de.employee_id<br \/>                      JOIN departments d on de.department_id = <\/code><a href=\"http:\/\/d.id\" rel=\"noopener noreferrer nofollow\"><code>d.id<\/code><\/a><code><br \/>                 WHERE d.location = '\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a'<\/code><\/p>\n<p align=\"left\">\u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u0430\u0451\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<p align=\"left\"><code>1 Nested Loop  (cost=20.32..49.25 rows=7 width=8) (actual time=0.042..0.056 rows=8 loops=1)<\/code><br \/><code>2  -&gt;  Hash Join  (cost=20.18..47.87 rows=7 width=8) (actual time=0.028..0.033 rows=8 loops=1)<\/code><br \/><code>3    Hash Cond: (de.department_id = <\/code><a href=\"http:\/\/d.id\" rel=\"noopener noreferrer nofollow\"><code>d.id<\/code><\/a><code>)<\/code><br \/><code>4    -&gt;  Seq Scan on department_employees de  (cost=0.00..24.00 rows=1400 width=16) (actual time=0.011..0.012 rows=10 loops=1)<\/code><br \/><code>5    -&gt;  Hash  (cost=20.12..20.12 rows=4 width=8) (actual time=0.012..0.012 rows=3 loops=1)<\/code><br \/><code>6          Buckets: 1024  Batches: 1  Memory Usage: 9kB<\/code><br \/><code>7          -&gt;  Seq Scan on departments d  (cost=0.00..20.12 rows=4 width=8) (actual time=0.008..0.009 rows=3 loops=1)<\/code><br \/><code>8                Filter: ((location)::text = '\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a'::text)<\/code><br \/><code>9                Rows Removed by Filter: 2<\/code><br \/><code>10 -&gt;  Index Only Scan using employees_pkey on employees e  (cost=0.14..0.20 rows=1 width=8) (actual time=0.002..0.002 rows=1 loops=8)<\/code><br \/><code>11       Index Cond: (id = de.employee_id)<\/code><br \/><code>12       Heap Fetches: 8<\/code><br \/><code>13 Planning Time: 0.198 ms<\/code><br \/><code>14 Execution Time: 0.082 ms<\/code><\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>width<\/code> 10 \u0441\u0442\u0440\u043e\u043a\u0435: 8 \u0431\u0430\u0439\u0442 \u2014 \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0442\u043e\u043b\u044c\u043a\u043e id-\u0430 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430, \u0438\u0437 \u0432\u0441\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0441\u0430\u043c\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 name, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>width<\/code> \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e 524 \u0431\u0430\u0439\u0442.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043f\u043b\u0430\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u043e\u0441\u0442\u0435 <a href=\"https:\/\/habr.com\/ru\/companies\/tensor\/articles\/790282\/\" rel=\"noopener noreferrer nofollow\">\u041a\u0443\u0440\u0441 \u00abPostgreSQL \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445\u00bb: #4 \u2014 \u0410\u043d\u0430\u043b\u0438\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 (\u0447.1 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043b\u0430\u043d\u044b)<\/a>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u0418 \u0432\u0441\u0451 \u0432 \u0442\u043e\u0439 \u0436\u0435 &#171;PostgreSQL \u0438\u0437\u043d\u0443\u0442\u0440\u0438&#187; \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u043d\u043e\u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr\/>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d \u0438, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e <em>\u0447\u0442\u043e<\/em> \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u2014 \u0438\u043c\u044f, \u043f\u0430\u0441\u043f\u043e\u0440\u0442, \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u0438 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0443 \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u0430\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0432 \u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\u0438\u0445 \u043e\u0442\u0434\u0435\u043b\u0430\u0445.<\/p>\n<p>\u0410 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a (\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043a\u043b\u0438\u043a\u0430\u0431\u0435\u043b\u044c\u043d\u0430):<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/df4\/bf1\/902\/df4bf19021684f30d149de81316fd2ed.png\" alt=\"\u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0446\u0435\u043b\u0438\u043a\u043e\u043c\" title=\"\u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0446\u0435\u043b\u0438\u043a\u043e\u043c\" width=\"1961\" height=\"6081\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/df4\/bf1\/902\/df4bf19021684f30d149de81316fd2ed.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/df4\/bf1\/902\/df4bf19021684f30d149de81316fd2ed.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0446\u0435\u043b\u0438\u043a\u043e\u043c<\/figcaption><\/div>\n<\/figure>\n<h2>\u041f\u0440\u0438\u0437\u0435\u043c\u043b\u044f\u0435\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u043a\u043e\u0434<\/h2>\n<p>\u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u044b\u043c \u043b\u0443\u0447\u0448\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e. \u0414\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e, \u043d\u043e \u0437\u0430\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c &#171;\u043f\u0440\u0435\u0434\u043c\u0435\u0442&#187; \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0434\u0435\u0442\u0430\u043b\u0438 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043d\u043e\u0441\u043e\u043c \u0441\u0442\u0443\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0431 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u043f\u0440\u0438 \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/p>\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0421\u0423\u0411\u0414 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0432\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430 \u044f \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e, \u0430 \u0432\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 Kotlin \u043d\u0430\u0448 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u2014 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430. \u0418, \u0434\u0443\u043c\u0430\u044e, \u0432\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442\u0435 \u0448\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043c\u043e\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c: \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u043c\u0430\u043f\u044b \u0438\u043c\u0451\u043d \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 String \u0432 \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u043a\u0430\u043a \u0441\u043f\u0438\u0441\u043a\u0438 \u043c\u0430\u043f.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u0430\u043a\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f) \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438, \u043d\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Kotlin \u043c\u043d\u043e\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0441\u043f\u0438\u0441\u043a\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 <code>toSet<\/code>, \u043c\u044b \u043f\u043e\u0439\u0434\u0451\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0410 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u0447\u0443\u0442\u044c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0435\u0435, \u044f \u0432\u0432\u0435\u0434\u0443 \u043f\u0430\u0440\u0443 <a href=\"https:\/\/kotlinlang.ru\/docs\/type-aliases.html\" rel=\"noopener noreferrer nofollow\">\u0430\u043b\u0438\u0430\u0441\u043e\u0432<\/a>:<\/p>\n<pre><code class=\"kotlin\">typealias Row = Map&lt;String, Any?&gt; typealias Table = List&lt;Row&gt;<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c:<\/p>\n<pre><code class=\"kotlin\">fun Iterable&lt;Row&gt;.printRelation() {     val keys = this.first().keys     println(keys.joinToString(\",\"))     forEach {         val values = keys.map { key -&gt; it[key] }         println(values.joinToString(\",\"))     }     println(\"Rows: ${this.count()}\")     println() }<\/code><\/pre>\n<p>\u0418 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"kotlin\">val employees: Table = listOf(     mapOf(\"e_id\" to 1, \"e_name\" to \"\u041c\u0430\u0441\u043b\u043e\u0432\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u041c\u0430\u0440\u043a\u043e\u0432\u043d\u0430\", \"passport\" to \"4007467248\"),     mapOf(\"e_id\" to 2, \"e_name\" to \"\u041f\u043e\u0437\u0434\u043d\u044f\u043a\u043e\u0432 \u041f\u0430\u0432\u0435\u043b \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u0438\u0447\", \"passport\" to \"4007467249\"),     mapOf(\"e_id\" to 3, \"e_name\" to \"\u041a\u0443\u0437\u043d\u0435\u0446\u043e\u0432\u0430 \u0414\u0430\u0440\u044c\u044f \u0412\u044f\u0447\u0435\u0441\u043b\u0430\u0432\u043e\u0432\u043d\u0430\", \"passport\" to \"4007467250\"),     mapOf(\"e_id\" to 4, \"e_name\" to \"\u041c\u0430\u0439\u043e\u0440\u043e\u0432\u0430 \u0410\u043d\u0430\u0441\u0442\u0430\u0441\u0438\u044f \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430\", \"passport\" to \"4007467251\"),     mapOf(\"e_id\" to 5, \"e_name\" to \"\u0415\u0440\u0435\u043c\u0438\u043d\u0430 \u0410\u043d\u0430\u0441\u0442\u0430\u0441\u0438\u044f \u041a\u0438\u0440\u0438\u043b\u043b\u043e\u0432\u043d\u0430\", \"passport\" to \"4007467252\"),     mapOf(\"e_id\" to 6, \"e_name\" to \"\u0410\u0432\u0434\u0435\u0435\u0432 \u0421\u0442\u0435\u043f\u0430\u043d \u041c\u0430\u0442\u0432\u0435\u0435\u0432\u0438\u0447\", \"passport\" to \"4007467253\"),     mapOf(\"e_id\" to 7, \"e_name\" to \"\u0424\u0435\u0434\u043e\u0441\u0435\u0435\u0432\u0430 \u0421\u043e\u0444\u0438\u044f \u0418\u0432\u0430\u043d\u043e\u0432\u043d\u0430\", \"passport\" to \"4007467254\"),     mapOf(\"e_id\" to 8, \"e_name\" to \"\u041f\u043b\u043e\u0442\u043d\u0438\u043a\u043e\u0432\u0430 \u0410\u0440\u0438\u043d\u0430 \u041d\u0438\u043a\u0438\u0442\u0438\u0447\u043d\u0430\", \"passport\" to \"4007467255\"), ) val departments: Table = listOf(     mapOf(\"d_id\" to 1, \"d_name\" to \"\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438\", \"location\" to \"\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\"),     mapOf(\"d_id\" to 2, \"d_name\" to \"\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438\", \"location\" to \"\u041c\u043e\u0441\u043a\u0432\u0430\"),     mapOf(\"d_id\" to 3, \"d_name\" to \"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\", \"location\" to \"\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\"),     mapOf(\"d_id\" to 4, \"d_name\" to \"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\", \"location\" to \"\u041c\u043e\u0441\u043a\u0432\u0430\"),     mapOf(\"d_id\" to 5, \"d_name\" to \"\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f\", \"location\" to \"\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\"), ) val departmentEmployees: Table = listOf(     mapOf(\"department_id\" to 1, \"employee_id\" to 1, \"training_budget\" to 55000),     mapOf(\"department_id\" to 3, \"employee_id\" to 1, \"training_budget\" to 40000),     mapOf(\"department_id\" to 3, \"employee_id\" to 2, \"training_budget\" to 55000),     mapOf(\"department_id\" to 5, \"employee_id\" to 2, \"training_budget\" to 55000),     mapOf(\"department_id\" to 2, \"employee_id\" to 3, \"training_budget\" to 0),     mapOf(\"department_id\" to 1, \"employee_id\" to 4, \"training_budget\" to 10000),     mapOf(\"department_id\" to 5, \"employee_id\" to 5, \"training_budget\" to 70000),     mapOf(\"department_id\" to 2, \"employee_id\" to 6, \"training_budget\" to 13500),     mapOf(\"department_id\" to 4, \"employee_id\" to 7, \"training_budget\" to 25000),     mapOf(\"department_id\" to 4, \"employee_id\" to 8, \"training_budget\" to 94000), )<\/code><\/pre>\n<p>\u0410 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>table<\/code>:<\/p>\n<pre><code class=\"kotlin\">var table: Table<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e \u0438 \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0441\u0431\u043e\u0440\u043a\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430.<\/p>\n<p>\u041e\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u00ab\u043f\u043e\u0441\u0442\u0430\u00bb FROM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>table<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"kotlin\">\/\/ FROM employees e table = employees<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0451\u0442 \u043f\u0430\u0440\u0430 INNER JOIN-\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c. \u0414\u043b\u044f \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <a href=\"https:\/\/kotlinlang.ru\/docs\/extensions.html\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438<\/a> Kotlin \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u0442\u0438\u043f\u0443 <code>Table<\/code> \u043c\u0435\u0442\u043e\u0434 <code>innerJoin<\/code>.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u0435\u043d \u0438 \u043f\u043e\u043d\u044f\u0442\u0435\u043d \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"kotlin\">fun Table.imperativeInnerJoin(right: Table, cond: (Row, Row) -&gt; Boolean): Table {     val result = mutableListOf&lt;Row&gt;()     for (leftRow in this) {         for (rightRow in right) {             if (cond(leftRow, rightRow)) {                 result.add(leftRow + rightRow)             }         }     }     return result }<\/code><\/pre>\n<p>\u041d\u043e \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<pre><code class=\"kotlin\">fun Table.innerJoin(right: Table, cond: (Row, Row) -&gt; Boolean): Table =     this.flatMap { leftRow -&gt;         right             .filter { rightRow -&gt; cond(leftRow, rightRow) }             .map { rightRow -&gt; leftRow + rightRow }     }<\/code><\/pre>\n<p>\u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c JOIN-\u044b \u0432 \u043d\u0430\u0448 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440:<\/p>\n<pre><code class=\"kotlin\">\/\/ JOIN department_employees de on e.id = de.employee_id table = table.innerJoin(departmentEmployees) { e, de -&gt; e[\"e_id\"] == de[\"employee_id\"] }  \/\/ JOIN departments d on de.department_id = d.id table = table.innerJoin(departments) { de, d -&gt; de[\"department_id\"] == d[\"d_id\"] }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0443 \u043d\u0430\u0441 \u0438\u0434\u0451\u0442 \u00ab\u043f\u043e\u0441\u0442\u00bb WHERE, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>filter<\/code>:<\/p>\n<pre><code class=\"kotlin\">\/\/ WHERE d.location = '\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a' table = table.filter { it[\"location\"] == \"\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\" }<\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 <code>groupBy<\/code> \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0445\u043e\u0442\u044c \u0438 \u0435\u0441\u0442\u044c, \u043d\u043e \u043d\u0430\u043c \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u043f\u0443 (\u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u0438 \u043c\u0430\u043f (\u0441\u043f\u0438\u0441\u043a\u0438 \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b). \u041d\u0430\u043c \u0436\u0435 \u043d\u0443\u0436\u0435\u043d \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440, \u0434\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0442\u043e\u0442 \u0436\u0435 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e \u0438 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0430\u043f, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043b\u044f \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0431\u0443\u0434\u0443\u0442 \u0441\u043f\u0438\u0441\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u0442\u0438\u043f\u0430\u0445 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435: <code>groupBy<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>Map&lt;Any, List&lt;Row&gt;&gt;<\/code>, \u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u0435\u0440\u043d\u0443\u043b <code>Table<\/code> (<code>List&lt;Row&gt;<\/code>, \u0433\u0434\u0435 <code>Row<\/code> \u2014 \u044d\u0442\u043e <code>Map&lt;String, Any&gt;<\/code>).<\/p>\n<p>\u0412\u0437\u043e\u0440\u0432\u0430\u043b\u0441\u044f \u043c\u043e\u0437\u0433? \u0423 \u043c\u0435\u043d\u044f \u0442\u043e\u0436\u0435. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4fc\/a40\/4bc\/4fca404bc3297c40f7ea7877ccc5f7c0.png\" alt=\"Kotlin groupBy \u0438 SQL GROUP BY\" title=\"Kotlin groupBy \u0438 SQL GROUP BY\" width=\"2121\" height=\"931\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4fc\/a40\/4bc\/4fca404bc3297c40f7ea7877ccc5f7c0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4fc\/a40\/4bc\/4fca404bc3297c40f7ea7877ccc5f7c0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Kotlin groupBy \u0438 SQL GROUP BY<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b <code>groupBy<\/code>: \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0432 SQL.<\/p>\n<p>\u041e\u0431\u043e\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0430\u043f \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 <code>groupingKey<\/code> \u0438 <code>simpleAttr<\/code>. \u0412 \u044d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 5 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u043c\u0430\u043f), \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043b\u044e\u0447\u0438 <code>groupingKey<\/code> \u0438\u043c\u0435\u044e\u0442 \u0442\u0440\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 <code>1<\/code>, <code>2<\/code>, <code>3<\/code>.<\/p>\n<p>\u0418 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 <code>groupBy<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u043f\u0443, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>groupingKey<\/code> (<code>1<\/code>, <code>2<\/code>, <code>3<\/code>), \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0430\u043f, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043b\u044e\u0447 <code>groupingKey<\/code> \u0440\u0430\u0432\u0435\u043d \u043a\u043b\u044e\u0447\u0443 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043c\u0430\u043f\u0435.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 SQL-\u044f \u0436\u0435, \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0430\u043f (<code>Table<\/code>) \u2014 \u043f\u043e \u043c\u0430\u043f\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>groupingKey<\/code>. \u0418 \u0432 \u044d\u0442\u0438\u0445 \u043c\u0430\u043f\u0430\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 <code>groupingKey<\/code> \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u0430\u043c\u0438, \u0430 \u0432\u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0445 <code>simpleAttr<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043e\u0432.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043e\u0431\u043e\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u2014 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0432\u0430\u0441 \u043f\u043e\u043d\u0438\u043c\u0430\u044e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p><code>groupBy<\/code> \u0432 Kotlin \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0442\u0430\u043a:<\/p>\n<pre><code class=\"kotlin\">public inline fun &lt;T, K, M : MutableMap&lt;in K, MutableList&lt;T&gt;&gt;&gt; Iterable&lt;T&gt;.groupByTo(     destination: M, 1     keySelector: (T) -&gt; K ): M {     for (element in this) { 2         val key = keySelector(element) 3         val list = destination.getOrPut(key) { ArrayList&lt;T&gt;() } 4         list.add(element) 5     }     return destination }<\/code><\/pre>\n<ol>\n<li>\n<p>\u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e \u043c\u0430\u043f\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e, \u0432 \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u043c\u0430\u043f\u0443 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0430 \u0432 \u0441\u0430\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0441\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430\u0448\u0430 \u0436\u0435, SQL-\u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>groupBy<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"kotlin\">fun Table.groupBy(groupingKey: String): Table {     val keys = this.firstOrNull()?.keys 1         ?: return emptyList() \/\/ \u0435\u0441\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0443\u0441\u0442\u0430\u044f \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 2      val rowGroups: Collection&lt;List&lt;Row&gt;&gt; = this         .groupBy { it[groupingKey] } \/\/ \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e \u043a\u043b\u044e\u0447\u0443 3         .values      return rowGroups.map { rows -&gt; \/\/ \"\u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\" \u0433\u0440\u0443\u043f\u043f\u0443 (\u0441\u043f\u0438\u0441\u043e\u043a) \u0441\u0442\u0440\u043e\u043a \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 4         val groupedRowSeed: Map&lt;String, List&lt;Any?&gt;&gt; = keys.associateWith { listOf() } \/\/ \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u043f\u0443\u0441\u0442\u044b\u043c\u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439         val groupedRow: Map&lt;String, List&lt;Any?&gt;&gt; = rows.fold(groupedRowSeed) { groupedRow, row -&gt;             groupedRow.mapValues { (key, values) -&gt;                 values + row[key]             }         }         \/\/ \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u0441\u043a\u0430\u043b\u044f\u0440 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u0433\u0440\u0443\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443         groupedRow + (groupingKey to rows.first()[groupingKey])     }  }<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<ol>\n<li>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0440\u0430\u0441\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0437\u044f\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043d\u0430\u0434\u043e \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u043a\u043b\u044e\u0447\u0438 \u043c\u0430\u043f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u0441\u0442\u043e\u0439, \u0442\u043e \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u2014 \u0431\u043b\u0430\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a;<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u044e\u0447\u0438 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0442\u0440\u043e\u043a \u2014 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043a\u0430\u0436\u0434\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u0441\u0442\u0440\u043e\u043a\u0430 10)<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b (<code>rows.fold<\/code> \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 11)<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c (\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c) \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c (<code>groupedRow.mapValues<\/code> \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 12)<\/p>\n<ul>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435-\u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (<code>values + row[key]<\/code> \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 13)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0441\u043a\u0430\u043b\u044f\u0440, \u0432\u0437\u044f\u0432 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 (\u0441\u0442\u0440\u043e\u043a\u0430 17)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u044f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435\/\u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u043e \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435\u0435, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0437\u0430 3\u20134 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u043e 0.5\u20132 \u0447\u0430\u0441\u0430 \u043a\u0430\u0436\u0434\u0430\u044f.<\/p>\n<p align=\"left\">\u0415\u0441\u043b\u0438 \u0432\u0438\u0434\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043b\u0443\u0447\u0448\u0435 \u2014 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p align=\"left\">\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0448 groupBy \u2014 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/github.com\/ergonomic-code\/Project-Ford\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0435\u043a\u0442<\/a> \u0438 \u043f\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u043a\u043e\u0434\u0443 \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u043e\u043c.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0424\u0443\u0445, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u043b\u043e\u0436\u043d\u043e. \u0417\u0430\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043d\u0430\u0448 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439:<\/p>\n<pre><code class=\"kotlin\">\/\/ GROUP BY e.id table = table.groupBy(\"e_id\")<\/code><\/pre>\n<p>\u0418 \u0434\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u00ab\u043f\u043e\u0441\u0442\u044b\u00bb \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432:<\/p>\n<pre><code class=\"kotlin\">    \/\/ HAVING sum(de.training_budget) &gt; 80000     table = table.filter { (it[\"training_budget\"] as Collection&lt;Int&gt;).sum() &gt; 80000 }      \/\/ ORDER BY sum(training_budget) desc     table = table.sortedByDescending { (it[\"training_budget\"] as Collection&lt;Int&gt;).sum() }      \/\/ OFFSET 1     table = table.drop(1)      \/\/ LIMIT 1     table = table.take(1)      \/\/ SELECT e.id,     \/\/       e.name || ', \u043f\u0430\u0441\u043f\u043e\u0440\u0442: ' || e.passport as name,     \/\/       sum(training_budget) as sum,     \/\/       array_agg(d.name || ' - ' || de.training_budget) as report     table = table.map {         mapOf(             \"e_id\" to it[\"e_id\"],             \"e_name\" to \"${(it[\"e_name\"] as Collection&lt;String&gt;).first()}, \u043f\u0430\u0441\u043f\u043e\u0440\u0442: ${(it[\"passport\"] as Collection&lt;String&gt;).first()}\",             \"sum\" to (it[\"training_budget\"] as Collection&lt;Int&gt;).sum(),             \"details\" to (it[\"d_name\"] as Collection&lt;String&gt;).zip((it[\"training_budget\"] as Collection&lt;Int&gt;))                 .joinToString(\",\", \"{\", \"}\") { (n, b) -&gt; \"$n - $b\" }         )     }<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0438\u0448\u0435\u043d\u043a\u0438 \u043d\u0430 \u0442\u043e\u0440\u0442\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u0435\u0434\u0438\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (<code>Table<\/code> aka <code>List&lt;Row&gt;<\/code>), \u0438 \u044d\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0435\u0434\u0443\u0442 \u043f\u043e \u043d\u0435\u0439 \u043a\u0430\u043a \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443:<\/p>\n<pre><code class=\"kotlin\">employees     .innerJoin(departmentEmployees) { e, de -&gt; e[\"e_id\"] == de[\"employee_id\"] }     .innerJoin(departments) { de, d -&gt; de[\"department_id\"] == d[\"d_id\"] }     .filter { it[\"location\"] == \"\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a\" }     .groupBy(\"e_id\")     .filter { (it[\"training_budget\"] as Collection&lt;Int&gt;).sum() &gt; 80000 }     .sortedByDescending { (it[\"training_budget\"] as Collection&lt;Int&gt;).sum() }     .drop(1)     .take(1)     .map {         mapOf(             \"e_id\" to it[\"e_id\"],             \"e_name\" to \"${(it[\"e_name\"] as Collection&lt;String&gt;).first()}, \u043f\u0430\u0441\u043f\u043e\u0440\u0442: ${(it[\"passport\"] as Collection&lt;String&gt;).first()}\",             \"sum\" to (it[\"training_budget\"] as Collection&lt;Int&gt;).sum(),             \"details\" to (it[\"d_name\"] as Collection&lt;String&gt;).zip((it[\"training_budget\"] as Collection&lt;Int&gt;))                 .joinToString(\",\", \"{\", \"}\") { (n, b) -&gt; \"$n - $b\" }         )     }     .printRelation()<\/code><\/pre>\n<hr\/>\n<p>\u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0442\u0430\u043c, \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0435\u0434\u0443\u0442 \u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0430 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<h2>SELECT-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0441\u0442\u0440\u043e\u043a\u0438<\/h2>\n<p>\u0412 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0438 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u044b \u0441\u0442\u0440\u043e\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0421\u0423\u0411\u0414 \u0434\u0435\u043b\u0430\u044e\u0442 \u0432\u0441\u0451 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441 \u0434\u0438\u0441\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u0418 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b SQL, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u0430 \u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0414\u043b\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043b\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 \u043c\u043e\u0435\u0433\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 ~3.5\u041c \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"sql\">SELECT * FROM events;<\/code><\/pre>\n<p>\u0423 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u043d:<\/p>\n<pre><code class=\"sql\">Seq Scan on events  (cost=0.00..107812.46 rows=3632446 width=145) (actual time=0.024..295.777 rows=3632446 loops=1) Planning Time: 0.093 ms Execution Time: 374.656 ms<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: actual time=0.024..295.777. \u0414\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430 \u2014 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u043f\u043e\u043b\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0418 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432 IDEA, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 500 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e\u043d \u0432\u0435\u0440\u043d\u0451\u0442 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0442\u043e IDEA \u0443\u0436\u0435 \u0437\u0430\u0434\u0443\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0435\u0434\u0443\u0442 \u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0430 \u0441\u0442\u0440\u043e\u043a\u0438. \u0418, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u2014 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443-\u00ab\u043f\u043e\u0441\u0442\u0443\u00bb \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u00ab\u043f\u043e\u0441\u0442\u0443\u00bb.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u043d\u0430 <code>List<\/code>-\u0430\u0445, \u0430 \u043d\u0430 <a href=\"https:\/\/kotlinlang.ru\/docs\/sequences.html\" rel=\"noopener noreferrer nofollow\"><code>Sequence<\/code><\/a>-\u0430\u0445 \u2014 \u043b\u0435\u043d\u0438\u0432\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u0445 \u0432 \u0434\u0443\u0445\u0435 <code>map<\/code>\/<code>filter<\/code> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e, \u0430 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0432\u0440\u043e\u0434\u0435 <code>toList<\/code>, <code>forEach<\/code> \u0438\u2026\u200b <code>groupBy<\/code>.<\/p>\n<p>\u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 API <code>List<\/code> \u0438 <code>Sequence<\/code> \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043d\u0443\u0436\u0434 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043b\u0435\u043d\u0438\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 (\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c) \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/557\/ba4\/263\/557ba4263d7fbe6b211da4a28110d985.png\" alt=\"2025 05 30 12 34 37\" title=\"\u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\" width=\"2518\" height=\"754\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/557\/ba4\/263\/557ba4263d7fbe6b211da4a28110d985.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/557\/ba4\/263\/557ba4263d7fbe6b211da4a28110d985.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0441\u0442\u0440\u043e\u043a<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0441\u0443\u0442\u0438 <code>List<\/code> \u0438 <code>Sequence<\/code> \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u0430, \u0432 \u043d\u0430\u0448\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0435\u043c\u044c \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/08e\/98e\/1ae\/08e98e1aefd2e7df81f0f22c666fae79.png\" alt=\"2025 05 30 12 48 11\" title=\"\u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0446\u0438\u044f innerJoin, groupBy \u0438 printTable \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c\u0438\" width=\"2514\" height=\"1232\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/08e\/98e\/1ae\/08e98e1aefd2e7df81f0f22c666fae79.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/08e\/98e\/1ae\/08e98e1aefd2e7df81f0f22c666fae79.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0446\u0438\u044f innerJoin, groupBy \u0438 printTable \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432 \u043f\u044f\u0442\u0438 \u043c\u0435\u0441\u0442\u0430\u0445 \u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0438\u043f\u044b \u0441 <code>List<\/code>\/<code>Iterable<\/code> \u043d\u0430 <code>Sequence<\/code> \u0438 \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u0442\u043e\u0301\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 78\u201380 \u043b\u0435\u043d\u0438\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"kotlin\">fun LazyTable.groupBy(groupingKey: String): LazyTable {     \/\/ ...     val rowGroups: Collection&lt;List&lt;Row&gt;&gt; = this         .groupBy { it[groupingKey] } \/\/ \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e \u043a\u043b\u044e\u0447\u0443         .values     \/\/ ... }<\/code><\/pre>\n<p><code>groupBy<\/code> \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 eager \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e!<\/p>\n<p>\u0418 \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u2014 \u044d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e. <code>groupBy<\/code> \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0430\u0436\u0435 \u043f\u0435\u0440\u0432\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443, \u043d\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0432\u0441\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0438 \u0434\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0434\u0442\u0438 \u043f\u0435\u0440\u0432\u044b\u043c \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c.<\/p>\n<p>\u0418 \u0421\u0423\u0411\u0414 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0438\u043a\u0438 \u0438 \u0443 \u043d\u0438\u0445 \u043d\u0435\u0442 \u041e\u0440\u0430\u043a\u0443\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u043b: \u00ab\u0442\u0430\u043a, \u0432\u043e\u0442 \u0442\u0443\u0442 \u0441\u0442\u043e\u043f, \u0431\u043e\u043b\u044c\u0448\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0441\u0442\u0440\u043e\u043a \u043d\u0435\u0442 \u0438 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c\u00bb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 GROUP BY \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044e \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0438 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 \u0441\u0442\u0440\u043e\u043a).<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0421\u0423\u0411\u0414 \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u0438\u043a\u0438, \u043d\u043e \u0438\u043c\u0435\u044e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0435 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u043d\u0435\u043c\u0443 \u0435\u0434\u0443\u0442. \u0418 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u0432\u044b\u0448\u0435 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u043b\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438, \u0442\u043e \u0421\u0423\u0411\u0414 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0434\u0430\u0447\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b.<\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0440\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432:<\/p>\n<pre><code class=\"sql\">SELECT addition_date_time, count(*) FROM events GROUP BY addition_date_time LIMIT 1;  SELECT created_date_time, count(*) FROM events GROUP by created_date_time LIMIT 1;<\/code><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong><code>addition_date_time<\/code> \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0430 <code>created_date_time<\/code> \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0430\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446-\u043a\u043e\u0440\u043d\u0435\u0439 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0432 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0411\u0414.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418 \u0445\u043e\u0442\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u043f\u043b\u0430\u043d\u044b \u0443 \u043d\u0438\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435.<\/p>\n<p>\u041f\u043b\u0430\u043d \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"sql\">Limit  (cost=0.43..0.48 rows=1 width=16) (actual time=0.026..0.026 rows=1 loops=1)   -&gt;  GroupAggregate  (cost=0.43..150112.62 rows=3194779 width=16) (actual time=0.025..0.025 rows=1 loops=1)         Group Key: addition_date_time         -&gt;  Index Only Scan using events_addition_date_time_idx on events  (cost=0.43..100002.60 rows=3632446 width=8) (actual time=0.017..0.019 rows=5 loops=1)               Heap Fetches: 0 Planning Time: 0.096 ms Execution Time: 0.047 ms<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u043d\u043e, \u043a\u0430\u043a \u0421\u0423\u0411\u0414 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e <code>addition_date_time<\/code>. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438. \u0418 \u0442\u043e\u0433\u0434\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u2014 \u0434\u0430\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u043a \u0441 \u0442\u0430\u043a\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>\u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0435 \u0432 <strong>\u043e\u0446\u0435\u043d\u043a\u0435 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438<\/strong> \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u0430 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 (0.43..100002.60 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u2014 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438) \u0438 \u043f\u043e <strong>\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443<\/strong> \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u0442\u0440\u043e\u043a (5 \u0448\u0442\u0443\u043a) \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0432 4-\u0439 \u0441\u0442\u0440\u043e\u043a\u0435.<\/p>\n<p>\u0414\u043b\u044f <code>created_date_time<\/code> \u0436\u0435 \u0443 \u043d\u0430\u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043d\u0435\u0442, \u0438 \u043f\u043b\u0430\u043d \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0443\u0436\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443:<\/p>\n<pre><code class=\"sql\">Limit  (cost=263677.47..263677.74 rows=1 width=16) (actual time=427.237..435.087 rows=1 loops=1)   -&gt;  Finalize GroupAggregate  (cost=263677.47..525823.00 rows=961451 width=16) (actual time=422.557..430.406 rows=1 loops=1)         Group Key: created_date_time         -&gt;  Gather Merge  (cost=263677.47..506593.98 rows=1922902 width=16) (actual time=422.539..430.388 rows=2 loops=1)               Workers Planned: 2               Workers Launched: 2               -&gt;  Partial GroupAggregate  (cost=262677.45..283643.35 rows=961451 width=16) (actual time=401.635..401.762 rows=518 loops=3)                     Group Key: created_date_time                     -&gt;  Sort  (cost=262677.45..266461.24 rows=1513519 width=8) (actual time=401.613..401.648 rows=519 loops=3)                           Sort Key: created_date_time                           Sort Method: external merge  Disk: 21352kB                           Worker 0:  Sort Method: external merge  Disk: 20240kB                           Worker 1:  Sort Method: external merge  Disk: 22616kB                           -&gt;  Parallel Seq Scan on events  (cost=0.00..86623.19 rows=1513519 width=8) (actual time=3.152..147.662 rows=1210815 loops=3) Planning Time: 0.091 ms JIT:   Functions: 22 \"  Options: Inlining false, Optimization false, Expressions true, Deforming true\" \"  Timing: Generation 1.144 ms, Inlining 0.000 ms, Optimization 0.596 ms, Emission 13.454 ms, Total 15.194 ms\" Execution Time: 438.515 ms<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043b\u0438\u0441\u0442\u043e\u0432\u043e\u0439 \u0443\u0437\u0435\u043b \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 14-\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0432 \u0442\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0442\u0440\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>\u0418 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u2014 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 0 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<p>\u0418 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u0442\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0432 WHERE \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0431\u044a\u0451\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438. \u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043c\u043e\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f PostgreSQL \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u043d\u043e\u0439, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u00ab\u043f\u0440\u043e\u043f\u0443\u0448\u0438\u0442\u044c\u00bb \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0432\u044b\u0448\u0435 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443:<\/p>\n<pre><code class=\"sql\">SELECT created_date_time, count(*) FROM events GROUP by created_date_time HAVING created_date_time &gt; now() - '1 month'::interval AND count(*) &gt; 1 LIMIT 1;  ---  Limit  (cost=103786.39..103786.77 rows=1 width=16) (actual time=276.080..281.620 rows=1 loops=1)   -&gt;  Finalize GroupAggregate  (cost=103786.39..121457.98 rows=45831 width=16) (actual time=271.362..276.902 rows=1 loops=1)         Group Key: created_date_time         Filter: (count(*) &gt; 1)         Rows Removed by Filter: 8         -&gt;  Gather Merge  (cost=103786.39..118830.66 rows=121154 width=16) (actual time=271.343..276.883 rows=10 loops=1)               Workers Planned: 2               Workers Launched: 2               -&gt;  Partial GroupAggregate  (cost=102786.36..103846.46 rows=60577 width=16) (actual time=256.635..256.750 rows=394 loops=3)                     Group Key: created_date_time                     -&gt;  Sort  (cost=102786.36..102937.81 rows=60577 width=8) (actual time=256.613..256.635 rows=614 loops=3)                           Sort Key: created_date_time                           Sort Method: quicksort  Memory: 3664kB                           Worker 0:  Sort Method: quicksort  Memory: 3783kB                           Worker 1:  Sort Method: quicksort  Memory: 3742kB                           -&gt;  Parallel Seq Scan on events  (cost=0.00..97974.59 rows=60577 width=8) (actual time=238.770..248.230 rows=50433 loops=3)                                 Filter: (created_date_time &gt; (now() - '1 mon'::interval))                                 Rows Removed by Filter: 1160382 Planning Time: 0.109 ms JIT:   Functions: 29 \"  Options: Inlining false, Optimization false, Expressions true, Deforming true\" \"  Timing: Generation 1.619 ms, Inlining 0.000 ms, Optimization 0.720 ms, Emission 15.444 ms, Total 17.783 ms\" Execution Time: 282.480 ms <\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0438\u0434\u0451\u0442 \u0432 \u043b\u0438\u0441\u0442\u043e\u0432\u043e\u043c \u0443\u0437\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 25-\u0439 \u0441\u0442\u0440\u043e\u043a\u0435.<\/p>\n<p>\u041d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0441\u0443\u0434\u044c\u0431\u0443 \u043d\u0435 \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0432 WHERE \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u0431\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u0430\u0442\u0430\u043a\u0438 NoSQL \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0421\u0423\u0411\u0414 \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u044e\u0442 \u043d\u0430 \u0440\u044b\u043d\u043a\u0435 \u0443\u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 40 \u043b\u0435\u0442, \u0438 \u044f \u043d\u0435 \u0432\u0438\u0436\u0443 \u043f\u0440\u0438\u0447\u0438\u043d, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0432 \u043e\u0431\u043e\u0437\u0440\u0438\u043c\u043e\u043c \u0431\u0443\u0434\u0443\u0449\u0435\u043c.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 SQL-\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u0432\u044b\u043a\u043e\u043c \u0434\u043b\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043a\u0435\u043d\u0434-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043f\u043e\u043c\u043e\u0433 \u0432\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0448\u0430\u0433 \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p><em>PS&gt;<\/em><\/p>\n<p><em>\u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 <\/em><a href=\"https:\/\/github.com\/ergonomic-code\/Project-Ford\" rel=\"noopener noreferrer nofollow\"><em>GitHub-\u0435<\/em><\/a><em>.<\/em><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/919028\/\"> https:\/\/habr.com\/ru\/articles\/919028\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<ol>\n<li>\n<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0411\u0414<\/p>\n<\/li>\n<li>\n<p>SELECT-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/p>\n<ol>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 FROM<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 JOIN<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 WHERE<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 GROUP BY<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 HAVING<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ORDER BY<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b OFFSET \u0438 LIMIT<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SELECT<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u0437\u0435\u043c\u043b\u044f\u0435\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u043a\u043e\u0434<\/p>\n<\/li>\n<li>\n<p>SELECT-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0441\u0442\u0440\u043e\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ol>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u042f \u043e\u0442\u0447\u0451\u0442\u043b\u0438\u0432\u043e \u043f\u043e\u043c\u043d\u044e, \u043a\u0430\u043a \u0441\u0438\u0434\u0435\u043b \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u043a\u0443\u0440\u0441\u0435 \u043d\u0430 \u043b\u0430\u0431\u0430\u0445 \u043f\u043e \u0411\u0414 \u0438 \u0434\u043e\u043b\u0433\u043e \u0438 \u043c\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043d\u0430\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u044b\u043a\u0430 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u043b \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0432 \u0432 SELECT-\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0441 GROUP BY, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u0435\u0440\u043d\u0443\u043b \u043d\u0443\u0436\u043d\u044b\u0439 <s>\u043c\u043d\u0435<\/s> \u043f\u0440\u0435\u043f\u043e\u0434\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 SELECT, \u0445\u043e\u0442\u044f \u0431\u044b\u043b \u043f\u0440\u0438\u043b\u0435\u0436\u043d\u044b\u043c (\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0441\u043a\u0438\u0445 \u043a\u0443\u0440\u0441\u0430\u0445) \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u043c, \u0445\u043e\u0434\u0438\u043b \u043d\u0430 \u0432\u0441\u0435 \u043b\u0435\u043a\u0446\u0438\u0438 \u0438 \u0434\u0435\u043b\u0430\u043b \u043b\u0430\u0431\u044b \u0437\u0430 \u0441\u0435\u0431\u044f \u0438 \u043f\u0430\u0440\u0443 &#171;\u0442\u0435\u0445 \u043f\u0430\u0440\u043d\u0435\u0439&#187;.<\/p>\n<p>\u0414\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043b\u0435\u0442 \u0441\u043f\u0443\u0441\u0442\u044f, \u043a\u043e\u0433\u0434\u0430 \u044f \u0432\u0441\u0442\u0430\u043b \u043f\u043e \u0442\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0431\u0430\u0440\u0440\u0438\u043a\u0430\u0434 \u0438 \u043d\u0430\u0447\u0430\u043b \u0441\u0430\u043c \u0432\u0435\u0441\u0442\u0438 \u043b\u0430\u0431\u044b \u043f\u043e \u0411\u0414, \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0443\u0436\u0435 \u0443 \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432. \u0418, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043b\u0435\u0442 \u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u043e\u043d\u044f\u043b, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 SELECT, \u0442\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0434\u043b\u044f \u043d\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e (\u0432 \u043c\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435).<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"sql\">SELECT e.id,        e.name || ', \u043f\u0430\u0441\u043f\u043e\u0440\u0442: ' || e.passport as name,        sum(de.training_budget) as sum,        array_agg(d.name || ' - ' || de.training_budget) as details FROM employees e          JOIN department_employees de on e.id = de.employee_id          JOIN departments d on de.department_id = d.id WHERE d.location = '\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a' GROUP BY e.id HAVING sum(de.training_budget) &gt; 80000 ORDER BY sum(training_budget) desc OFFSET 1 LIMIT 1;<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u2014 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0434\u0430\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0432\u0432\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u0432 SQL \u0438 \u043e\u043d \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e \u0441 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c SQL.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: <\/strong>\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 <strong>\u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0421\u0423\u0411\u0414 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442 SELECT-\u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/strong>. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0438 \u043d\u0435\u043f\u043e\u043b\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443.<\/p>\n<p>\u041d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 <strong>\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438<\/strong> SELECT-\u0430 \u0435\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u0442\u0435 \u041b\u0443\u043a\u0430\u0441\u0430 \u042d\u0434\u0430\u0440\u0430 <a href=\"https:\/\/blog.jooq.org\/a-beginners-guide-to-the-true-order-of-sql-operations\/\" rel=\"noopener noreferrer nofollow\">A Beginner\u2019s Guide to the True Order of SQL Operations<\/a>, \u0430 \u043f\u0440\u043e \u0442\u043e \u043a\u0430\u043a \u0421\u0423\u0411\u0414 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043a\u043d\u0438\u0433\u0435 <a href=\"https:\/\/postgrespro.ru\/education\/books\/internals\" rel=\"noopener noreferrer nofollow\">PostgreSQL 17 \u0438\u0437\u043d\u0443\u0442\u0440\u0438<\/a> \u043e\u0442 \u0440\u0435\u0431\u044f\u0442 \u0438\u0437 Postgres Professional.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u2014 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0411\u0414, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0431\u0443\u0434\u0443 \u0435\u0433\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h2>\u0421\u0445\u0435\u043c\u0430 \u0411\u0414<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0411\u0414:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0411\u0414<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"sql\">CREATE TABLE employees (     id       BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,     passport NUMERIC(10)  NOT NULL UNIQUE,     name     VARCHAR(256) NOT NULL CHECK (length((name)) &gt; 3) );  CREATE TABLE departments (     id       BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,     name     VARCHAR NOT NULL,     location VARCHAR NOT NULL );  CREATE TABLE department_employees (     department_id   BIGINT REFERENCES departments,     employee_id     BIGINT REFERENCES employees,     training_budget NUMERIC(8, 2),     PRIMARY KEY (department_id, employee_id) );<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u0438\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u0438 \u043e\u0442\u0434\u0435\u043b\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u043c\u043d\u043e\u0433\u0438\u0435-\u043a\u043e-\u043c\u043d\u043e\u0433\u0438\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0431\u044e\u0434\u0436\u0435\u0442 \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u0440\u0430\u0434\u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u0445\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b departments \u0434\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u0434\u0435\u043b\u043e\u0432 \u0438 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 SELECT-\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<h2>SELECT-\u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e SELECT-\u0437\u0430\u043f\u0440\u043e\u0441 \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0434\u0443\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u00ab\u041f\u043e\u0441\u0442\u0430\u043c\u0438\u00bb \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f SQL-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u043a-\u0442\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e \u00ab\u043f\u043e\u0441\u0442\u044b\u00bb\/\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u2014 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <strong>\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/strong>.<\/p>\n<p>\u041d\u043e, \u0432\u043e\u043f\u0440\u0435\u043a\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 SELECT-\u0430, \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 SELECT, \u0430 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 FROM.<\/p>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 FROM<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 FROM, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u2014 \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u0441\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0432 FROM \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u043e\u043d \u0432\u044b\u0434\u0430\u0441\u0442 \u0438\u0445 CROSS JOIN (\u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435). \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u043e\u0432\u043d\u043e \u0442\u043e\u0433\u043e \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0438 JOIN-\u0430\u043c\u0438 \u2014 \u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0443 \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u0435\u0451 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<figure class=\"\">\n<div><figcaption>\u041f\u043e\u0441\u0442 FROM<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 JOIN<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 JOIN. \u0423 JOIN-\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f CROSS, INNER, LEFT, RIGHT \u0438 FULL.<\/p>\n<p>\u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435 \u0432\u0432\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u0432 SQL SELECT \u0432 \u0446\u0435\u043b\u043e\u043c, \u0430 \u043f\u043e\u0441\u0442 \u043f\u0440\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u0438 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u043d\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u2014 INNER JOIN.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 JOIN-\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0451 \u0443 \u0442\u043e\u0433\u043e \u0436\u0435 \u041b\u0443\u043a\u0430\u0441\u0430 \u042d\u0434\u0430\u0440\u0430 \u0432 \u043f\u043e\u0441\u0442\u0430\u0445 <a href=\"https:\/\/blog.jooq.org\/say-no-to-venn-diagrams-when-explaining-joins\/\" rel=\"noopener noreferrer nofollow\">Say NO to Venn Diagrams When Explaining JOINs<\/a> \u0438 <a href=\"https:\/\/blog.jooq.org\/a-probably-incomplete-comprehensive-guide-to-the-many-different-ways-to-join-tables-in-sql\/\" rel=\"noopener noreferrer nofollow\">A Probably Incomplete, Comprehensive Guide to the Many Different Ways to JOIN Tables in SQL<\/a>.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 INNER JOIN \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0432\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u043e\u0434\u043d\u0443 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u00ab\u043f\u043e\u0441\u0442\u0430\u00bb \u0438 \u043e\u0434\u043d\u0443 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437\u0432\u043d\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430. \u041e\u0431\u0435 \u044d\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0441\u0445\u0435\u043c\u0435 \u0411\u0414, \u0442\u0430\u043a \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438\/\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u043c\u0438\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u044b\u0448\u0435 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0438\u043b\u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0418 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 JOIN \u0441\u0442\u0440\u043e\u0438\u0442 \u043e\u0434\u043d\u0443. \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446. \u0410 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u2014 \u0432\u0441\u0435 \u043f\u0430\u0440\u044b \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, INNER JOIN \u2014 \u044d\u0442\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u043e\u0431\u0435\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b \u0441\u0442\u0440\u043e\u043a \u0438 \u2014 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u043e \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: <\/strong>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438 \u0441\u0430\u043c\u044b\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 JOIN-\u043e\u0432 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0421\u0423\u0411\u0414 \u2014 FOR LOOP JOIN. \u0414\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0438\u0434\u0430 \u2014 HASH JOIN \u0438 MERGE JOIN. HASH JOIN \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043e\u0434\u043d\u0430 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043c\u0435\u0449\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. \u0410 MERGE JOIN \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p align=\"left\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 JOIN-\u043e\u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u0441\u0451 \u0432 \u0442\u043e\u0439 \u0436\u0435 &#171;PostgreSQL 17 \u0438\u0437\u043d\u0443\u0442\u0440\u0438&#187;.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u043e\u0434\u043d\u0430 \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0439\u0442\u0438 \u0432\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435) \u043f\u0430\u0440, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u00ab\u041c\u0430\u0441\u043b\u043e\u0432\u0430\u00bb \u0438 \u00ab\u041f\u043e\u0437\u0434\u043d\u044f\u043a\u043e\u0432\u00bb, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043f\u043e \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <code>department_employees<\/code>.<\/p>\n<p>\u041d\u0430 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 JOIN \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e\u0441\u0442 JOIN department_employees<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e\u0441\u0442 JOIN departments<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 WHERE<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 WHERE \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0432 SQL. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u0447\u0442\u043e \u0438 \u0432\u0445\u043e\u0434\u043d\u0430\u044f \u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0438 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u2014 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u00ab\u043f\u043e\u0441\u0442\u00bb \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e\u0441\u0442 WHERE<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 GROUP BY<\/h3>\n<p>\u0410 \u0432\u043e\u0442 GROUP BY \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e GROUP BY \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u0434\u0430\u0436\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435. \u0410 \u041a\u043e\u0434\u0434 \u2014 \u0430\u0432\u0442\u043e\u0440 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u2014 \u0432\u0432\u0451\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438 (<em>&#171;with the objective of making the collection of relations easier to understand and control, simpler to operate upon, and more informative to the casual user&#187;<\/em> \u2014 <a href=\"https:\/\/forum.thethirdmanifesto.com\/wp-content\/uploads\/asgarosforum\/987737\/00-efc-further-normalization.pdf\" rel=\"noopener noreferrer nofollow\">FURTHER NORMALIZATION OF THE DATA BASE RELATIONAL MODEL<\/a>).<\/p>\n<p>GROUP BY \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u0442\u043e\u0436\u0435 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0441 \u0442\u0435\u043c \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u043d\u043e \u044d\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0443\u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u0434\u0432\u0430 \u043d\u0430\u0431\u043e\u0440\u0430. \u0410 \u0441\u0442\u0440\u043e\u043a GROUP BY \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%80%D1%82%D0%B5%D0%B6_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0440\u0442\u0435\u0436\u0430<\/a> \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<p>\u0414\u0432\u0443\u043c\u044f \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0438 \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. \u0413\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u2014 \u044d\u0442\u043e \u0442\u0435, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043f\u043e\u0441\u043b\u0435 GROUP BY, \u0430 \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u2014 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0413\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u0438 \u0441 \u043d\u0438\u043c\u0438 \u0434\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441 \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u2014 \u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435, \u043d\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438 \u0432\u044b\u0434\u0430\u0442\u044c \u043d\u0430\u0440\u0443\u0436\u0443. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u0435 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u0418 \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043b\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u2014 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u043c\u0430\u044f GROUP BY, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043a\u0430\u043b\u044f\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0435\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u0441\u043a\u0430\u043b\u044f\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (count, min, avg, array_agg \u0438 \u0442.\u0434.).<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u00ab\u043f\u043e\u0441\u0442\u00bb GROUP BY \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e\u0441\u0442 GROUP BY<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 HAVING<\/h3>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 HAVING \u2014 \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 WHERE, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u0442\u0440\u043e\u043a\u0430\u043c. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 HAVING \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c (<code>HAVING id BETWEEN 2 AND 4<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440), \u043d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u2014 \u0434\u0430\u043b\u0435\u0435 \u0432 \u043f\u043e\u0441\u0442\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, HAVING \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e WHERE \u2014 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 (\u0440\u0430\u0437\u0431\u0438\u0442\u044b\u043c\u0438 \u043d\u0430 \u0434\u0432\u0435 \u0433\u0440\u0443\u043f\u043f\u044b) \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u0443\u0441\u043b\u043e\u0432\u0438\u044e.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u00ab\u043f\u043e\u0441\u0442\u00bb HAVING \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e\u0441\u0442 HAVING<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ORDER BY<\/h3>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0438 SQL, \u043d\u0438 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0421\u0423\u0411\u0414 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0442 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u0410 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ORDER BY \u0442\u043e\u0436\u0435 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u043e\u0434\u0435 \u0447\u0438\u0442\u0435\u0440 \u2014 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u043a. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043e\u043d \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043e\u043a. \u0418 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, &#171;\u043f\u043e\u0441\u0442&#187; ORDER BY \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e\u0441\u0442 ORDER BY<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b OFFSET \u0438 LIMIT<\/h3>\n<p>\u042d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u043f\u043e \u0441\u0443\u0442\u0438 \u2014 \u0442\u0440\u0435\u0442\u044c\u044f \u0438\u043f\u043e\u0441\u0442\u0430\u0441\u044c WHERE \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u043a\u0430\u0445, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-463602","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/463602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=463602"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/463602\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=463602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=463602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=463602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}