Umím si to představit pomocí dvou databázových dotazů. První najde počet řádků v databázi a druhý vybere pomocí ORDER BY
ve sloupci, který mě zajímá a LIMIT X, 1
kde X je polovina počtu řádků.
Existuje jednoduchý způsob, jak to provést pouze s jedním dotazem?
Právě teď používám ve svých výpočtech průměry, ale myslím si, že průměr by byl lepší; neexistuje žádná horní hranice hodnot a jsou omezeny zdola 0.
EDIT: ano, chtěl jsem říct 'střední', ale měl jsem nějakou mozkovou chybu a hledal 'střední'. Nyní jsem našel odpověď na stackoverflow
Existuje docela dost diskuse zde o výpočtu středních hodnot z tabulky MySQL. Hledejte na stránce „medián“.
Kromě toho mi připadá remissa, že pro to není vestavěná funkce. Medián často popisuje centrální tendenci než střední. Access/VBA má ve svém seznamu funkcí stejnou díru.
Nikde jsem neviděl řešení, které by dokázalo získat medián v jediném dotazu. Nevadí mi dočasné tabulky, ale pokud to není nutné, skvělé! Tady je to, s čím jsem přišel:
SELECT AVG(profit) median, nofitems FROM(
SELECT x.profit, SUM(SIGN(1.0-SIGN(y.profit-x.profit))) diff, count(*) nofitems, floor(count(*)+1/2)
FROM brand_prof x, brand_prof y
GROUP BY x.profit
HAVING SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = floor((COUNT(*)+1)/2)
OR SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = ceiling((COUNT(*)+1)/2)
) x;
Testoval jsem to na rovnoměrnou sadu a dostal správnou odpověď. brand_prof jsou jen dva sloupce: brand_name a profit, desítková hodnota. Pokud by to byly celočíselné hodnoty, možná budete muset obsadit „strop ((CAST COUNT (*) AS DECIMAL) ...“) více, než jsem testoval. Skvělý nápad použít kartézský produkt a spojit součet znaků ne můj. Bohužel jsem na autora zapomněl.