Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Nietypowy order by
Forum PHP.pl > Forum > Przedszkole
darko
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
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
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ść.

  1. SELECT liczba,n
  2. FROM(SELECT liczba,(@n:=@n+1) AS n FROM liczby,(SELECT @n:=0) AS tmp1) AS tmp2
  3. ORDER BY n mod 2,IF(n mod 2,-n,n)
darko
@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
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
Nawet coś tam zaczęło w dobrą stronę zmierzać, nie jest idealnie, ale i tak dzięki, plusik się należy.
trueblue
Zapytanie dzieli grupę na wiersze parzyste i nieparzyste, jedne sortuje malejąco, drugie rosnąco.
Co jest nie tak?
darko
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
  1. SELECT liczba
  2. FROM(SELECT liczba,(@n:=@n+1) AS n FROM liczby,(SELECT @n:=0) AS tmp1 ORDER BY liczba) AS tmp2
  3. ORDER BY n mod 2,IF(n mod 2,-n,n)
darko
Niestety nie mogę tak zagnieżdżać zapytań, wyciągam w jednym zapytaniu wiele wartości, nie tylko tę jedną.
trueblue
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.