darko
16.08.2016, 11:01:21
Witam,
Czy ktoś z szanownych Forumowiczów ma jakiś skuteczny pomysł jak zdefiniować pole order by według następujących wymagań:
Mam w tabeli pole typu float trzymające pewne magiczne współczynniki, nie jest to istotne jakie, w każdym razie potrzebuję posortować wyniki tak, aby współczynniki najwyższe znajdowały się po środku, natomiast wartości najniższe znajdowały się na początku i na końcu, już tłumaczę obrazowo w ascii:
.:|MAX|:.
. - najniższe wartości
: - średnie wartości
| - wysokie wartości
MAX - najwyższa wartość
Konkretny przykład:
0.02 < -- najmniejszy brzegowy
0.4
0.95
12.56
149.28
1044.21 <--- max
136.11
13.91
0.91
0.42
0.01 < -- najmniejszy brzegowy
Pewnie sam bym to ogarnął, ale nie pamiętam jak matematycznie nazywa się taki rozkład.
Pyton_000
16.08.2016, 11:25:25
Kulawy przykład...
Tutaj nie masz żadnej reguły do posortowania. Bo dla czego 0.02 ma być na początku a 0.01 na końcu. A może odwrotnie? A co jak dojdzie jeszcze do tego 0.012. Gdzie ją wstawić?
trueblue
16.08.2016, 11:26:25
Rozkład, który masz na myśli to rozkład normalny, ale dotyczy on gęstości (czyli tu musiałaby być ilość danych wartości).
Ale jeśli nawet byłaby ilość, to nic by nie zmieniła, bo wartość w środku ma największa ilość, a nie "środkową" ilość.
SELECT liczba,n
FROM(SELECT liczba,(@n:=@n+1) AS n FROM liczby,(SELECT @n:=0) AS tmp1) AS tmp2
ORDER BY n mod 2,IF(n mod 2,-n,n)
darko
16.08.2016, 11:47:55
@Pyton_000 - podany przykład odzwierciedla dokładnie moje potrzeby, tutaj może nie tyle chodzi o jakiekolwiek sortowanie, co o przyporządkowanie wartości według zadanego kryterium. Nie zależy mi na tym czy 0.01 będzie na początku czy na końcu, najważniejsze dla mnie jest to, że max jest w środku i wszystko, co mniejsze od max rozchodzi się w obie strony.
@trueblue - niezupełnie o to mi chodziło, nie mam tu do czynienia z rozkładem prawdopodobieństwa.
Nie wiem, może powinienem szukać odpowiedzi w odpowiednio dobranych warunkach min i max ?
trueblue
16.08.2016, 11:50:57
Napisałem, że rozkład prawdopodobieństwa nic by Ci nie pomógł, bo problem sprowadziłby się do tego, który jest obecnie.
Wobec powyższego podałem Ci rozwiązanie. Sprawdzałeś?
darko
16.08.2016, 12:01:17
Nawet coś tam zaczęło w dobrą stronę zmierzać, nie jest idealnie, ale i tak dzięki, plusik się należy.
trueblue
16.08.2016, 12:10:23
Zapytanie dzieli grupę na wiersze parzyste i nieparzyste, jedne sortuje malejąco, drugie rosnąco.
Co jest nie tak?
darko
16.08.2016, 12:20:38
Wartość najwyższa nie znajduje się po środku, a na piątym miejscu na łącznie 23 rekordy. Idealnie jeśliby znajdowała się na 11. lub 12. miejscu.
trueblue
16.08.2016, 12:49:50
SELECT liczba
FROM(SELECT liczba,(@n:=@n+1) AS n FROM liczby,(SELECT @n:=0) AS tmp1 ORDER BY liczba) AS tmp2
ORDER BY n mod 2,IF(n mod 2,-n,n)
darko
16.08.2016, 13:47:29
Niestety nie mogę tak zagnieżdżać zapytań, wyciągam w jednym zapytaniu wiele wartości, nie tylko tę jedną.
trueblue
16.08.2016, 13:48:56
Wstaw wybierane kolumny do podzapytania, a potem do głównego zapytania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.