Last active
August 10, 2021 22:54
-
-
Save DominikStyp/b3224b6cfafcb6fd12e3a1c0b7576ed9 to your computer and use it in GitHub Desktop.
SQL Window Functions (MariaDB), PARTITION BY
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DROP TABLE IF EXISTS `test`.`employee`; | |
CREATE TABLE `test`.`employee` ( | |
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, | |
`name` VARCHAR(45) NULL, | |
`manager_id` INT UNSIGNED NOT NULL, | |
PRIMARY KEY (`id`)); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Dev1', '10'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Dev2', '10'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Dev3', '11'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Dev4', '12'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Marketer1', '9'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Marketer2', '9'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('CEO', '0'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Managers Director', '7'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Marketing Director', '7'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Manager1', '8'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Manager2', '8'); | |
INSERT INTO `test`.`employee` (`name`, `manager_id`) VALUES ('Manager3', '8'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
id | name | manager_id | people_per_manager | group_manager | |
---|---|---|---|---|---|
11 | Manager2 | 8 | 3 | Managers Director | |
12 | Manager3 | 8 | 3 | Managers Director | |
10 | Manager1 | 8 | 3 | Managers Director | |
2 | Dev2 | 10 | 2 | Manager1 | |
1 | Dev1 | 10 | 2 | Manager1 | |
5 | Marketer1 | 9 | 2 | Marketing Director | |
6 | Marketer2 | 9 | 2 | Marketing Director | |
9 | Marketing Director | 7 | 2 | CEO | |
8 | Managers Director | 7 | 2 | CEO | |
4 | Dev4 | 12 | 1 | Manager3 | |
3 | Dev3 | 11 | 1 | Manager2 | |
7 | CEO | 0 | 1 | NULL |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
USE test; | |
SELECT id, name, manager_id, | |
-- here we partition by manager_id which is almost the same as GROUP BY | |
-- but it returns all rows not grouped | |
COUNT(manager_id) OVER (PARTITION BY manager_id) as people_per_manager, | |
(SELECT emp.name FROM employee AS emp WHERE emp.id = employee.manager_id) as group_manager | |
FROM employee | |
ORDER BY people_per_manager DESC, manager_id DESC; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Links: https://mariadb.com/kb/en/window-functions-columnstore-window-functions/