Mysql zapytanie zwracajace % rekordow. |
Mysql zapytanie zwracajace % rekordow. |
30.12.2003, 15:09:53
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 10.12.2003 Ostrzeżenie: (0%) |
Witam!
Mam taka tablice: id int ilosc int z rekordami: 1;1 2;2 3;4 4;3 5;6 6;2 Chcialbym napisac zapytania ktore zwroci mi w kolejnosci od najwiekszej ilosc do najmniejszej rekordy ktore stanowia 60% sumy ilosci wszystkich rekordow (ale zakrecilem) czyli wszystkie rekordy razem daja mi ilosc 18. 60% z 18 daje 10,8 czyli wynik powinien zwracac rekordy az suma ilosci w tych rekordach nie przekorczy 10,8 w kolejnosci od najwiekszej ilosci do najmniejszej: 5;6 3;4 Powiedzmy ze tworzac zapytanie znam wynik sumy tego zapytania w calosci czyli 18. Ma ktos moze jakis pomysl jak stworzyc takie zapytanie? Zrobienie tego na poziomie php jest bardzo latwe, ale jezeli rekordow sa miliony to lepiej chyba zaprzegnac do tego baze i wyselekcjinowac rekordy juz na jej poziomie. Pozdrawiam |
|
|
30.12.2003, 20:45:06
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) |
Może to?
[sql:1:bdccc3d5e7]SELECT COUNT(*) AS ile FROM tabela[/sql:1:bdccc3d5e7] Weź to przypisz do jakiejś zmiennej (tutaj $ile) i wstaw do następnego zapytania: [sql:1:bdccc3d5e7]SELECT @ile:=SUM(ilosc), @maxproc:=((".$ile."/@ilosc)*166), @proc:=((ilosc/@ilosc)*100), pole1, pole2, pole3 FROM tabela WHERE @proc<@maxproc ORDER BY ilosc[/sql:1:bdccc3d5e7] :?: -------------------- |
|
|
30.12.2003, 21:26:49
Post
#3
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) |
Jak to mowia starozytni indianie "close, but no banana"
[sql:1:b15b5c3358] select @a:=0,@b:=sum(ilosc)*60/100 from tablica; select id, ilosc from tablica having (@a:=@a+ilosc)<@b order by ilosc desc; [/sql:1:b15b5c3358] |
|
|
30.12.2003, 21:33:58
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) |
Do czego służy HAVING W manualu jakoś to tak dziwnie opisane i nie moge zbytnio znaleźć...
-------------------- |
|
|
31.12.2003, 11:10:28
Post
#5
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 10.12.2003 Ostrzeżenie: (0%) |
Wielkie dzieki dokladnie o to mi chodzilo.
Having sluzy do porownywania danych w zapytaniu , glownie jest uzywany przy grupowaniu danych np: SELECT costam,sum(ilosc) as sumilosc FROM tablice GROUP BY costam HAVING sumilosc>100; |
|
|
31.12.2003, 12:32:27
Post
#6
|
|
Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) |
Cytat Having sluzy do porownywania danych w zapytaniu , glownie jest uzywany przy grupowaniu danych np:
SELECT costam,sum(ilosc) as sumilosc FROM tablice GROUP BY costam HAVING sumilosc>100; Nie tyle porównywaniu co filtrowaniu. Jeśli pogrupujesz sobie wiersze za pomocą GROUP BY to potem możesz odfiltrować te grupy za pomocą HAVING (brak GROUP BY oznacza, że cały wynik == jedna grupa). Tylko jeśli dla danej grupy warunek po HAVING jest spełniony to pojawi się ona w ostatecznym wyniku zapytania. Cały knif rozwiązania Uboota polega na tym, że HAVING jest wykonywane jako prawie ostatnia operacja na danych przed wysłaniem ich do klienta (po nim wykonywany tylko LIMIT), a w szczególności po ORDER BY. |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 04:06 |