Skip to content

Instantly share code, notes, and snippets.

@XDean
Last active January 2, 2019 10:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save XDean/0ecc55841b2db614583acffb406947c0 to your computer and use it in GitHub Desktop.
Save XDean/0ecc55841b2db614583acffb406947c0 to your computer and use it in GitHub Desktop.
[SQL] Query Count, Min, Max, Mean, Median and Quartile in one statement
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