Last active
January 2, 2019 10:47
-
-
Save XDean/0ecc55841b2db614583acffb406947c0 to your computer and use it in GitHub Desktop.
[SQL] Query Count, Min, Max, Mean, Median and Quartile in one statement
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
SELECT | |
`count` AS `count`, | |
MIN(`value`) AS `min`, | |
MAX(`value`) AS `max`, | |
AVG(`value`) AS `mean`, | |
AVG(CASE WHEN ABS(`rank`-`count`*.25 + .5)<=.5 THEN `value` ELSE NULL END) AS q1, | |
AVG(CASE WHEN ABS(`rank`-`count`*.5 + .5)<=.5 THEN `value` ELSE NULL END) AS q2, | |
AVG(CASE WHEN ABS(`rank`-`count`*.75 + .5)<=.5 THEN `value` ELSE NULL END) AS q3 | |
FROM | |
( | |
SELECT `value`, @i_rank:=@i_rank+1 AS `rank` | |
FROM ( | |
-- SQL don't allow order in subquery only if it has limit (tested in MariaDB) | |
SELECT <your_column> AS `value` FROM <your_table> ORDER BY 1 LIMIT 100000000 | |
) AS t_rank_value, (SELECT @i_rank:=0) AS t_rank_rank | |
) AS `t_rank`, | |
( | |
SELECT COUNT(*) AS `count` FROM <your_table> | |
) AS `t_count` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment