• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wytłumaczenie least i greatest

Object Storage Arubacloud
0 głosów
341 wizyt
pytanie zadane 1 września 2015 w SQL, bazy danych przez rafikbarca Użytkownik (680 p.)
edycja 1 września 2015 przez rafikbarca

Czy ktoś jest mi w stanie wytłumaczyć działanie lesast i greatest? A konkretnie wytłumaczyć jak działa takie zapytanie:

SELECT LEAST(`id1`,`id2`) AS tmpid1,
GREATEST(`id1`,`id2`) AS tmpid2, COUNT(*)  AS votes 
FROM glosy GROUP BY tmpid1,tmpid2 ORDER BY votes DESC 

Zapytanie to zlicza mi że jeżeli ktoś oglądał film B i poleca film A to sumuje to z tym z tym że jak ktoś oglądał film A  poleca FilmB.

Potrzebuje natomiast opisać jak konkretnie działa to zapytanie co robią poszczególne składowe. Nie rozumiem działania Least i Greatest

3 odpowiedzi

+1 głos
odpowiedź 2 września 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
wybrane 5 września 2015 przez rafikbarca
 
Najlepsza
Jakie wartosci przyjmują id1 i id2? Coś mi w tym nie pasuje.
komentarz 4 września 2015 przez rafikbarca Użytkownik (680 p.)

Przykładowo w bazie mam takie powiązania kolejno kulumny id1 i id2

zapytanie:

SELECT LEAST(`1_id`,`2_id`) AS tmpid1,GREATEST(`1_id`,`2_id`) AS tmpid2, COUNT(*) AS votes FROM glosy where `1_id`=15 or `2_id`=15 GROUP BY tmpid1,tmpid2 ORDER BY votes DESC

wynik:

patrząc na dane wyżej widać że zliczył poprawnie

bez klauzuli where

zlicza poprawnie wszystkie

komentarz 4 września 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
edycja 4 września 2015 przez mowmiheniek

ok, teraz rozumiem :) id1 to ogladany film, id2 to polecany.

LEAST wybiera najmiejszą liczbę w wierszach kolumn id1 i id2 (np. jak jest 14 i 13 wybierze 13) i zapisuje w tmpid1 
GREATEST wybiera największą liczbę w wierszu i zapisuje w tmpid2

Po tym tymczasowa tabela wygląda tak:

GROUP BY tmpid1,tmpid2 = grupuje takie same wiersze (np. 1 i 3)

COUNT(*) - liczy liczbę wierszy w tabeli, jeżeli są złączone to sumuje i zapiuje jako nową kolumnę: votes

ORDER BY votes DESC -sortuje od największej liczby w votes

Mam nadzieję że wyjaśnłem.

komentarz 5 września 2015 przez rafikbarca Użytkownik (680 p.)

Zdecydowanie wyjaśnionewink

Wielkie dzięki

komentarz 5 września 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
Mógłbyś dać najlepszą odpowiedz i zaplusowac mnie? Próbuję dogonić w punktach comandeera ;)
komentarz 5 września 2015 przez rafikbarca Użytkownik (680 p.)
Oczywiście. Zawsze tak robie;)
0 głosów
odpowiedź 1 września 2015 przez Comandeer Guru (602,340 p.)

LEAST z podanych mu pól wybiera to, które zawiera najmniejszą wartość. GREATEST z kolei to, które zawiera największą wartość

Zapytanie: 

SELECT LEAST(1, 2, -1) AS l, GREATEST(1, 2, -1) AS g

zwróci l = -1 oraz g = 2

komentarz 2 września 2015 przez rafikbarca Użytkownik (680 p.)
W dalszym ciągu nie rozumiem jak w ten sposób dochodzi się się do zliczenia że jeżeli ktoś oglądał film B i poleca film A to sumuje to z tym z tym że jak ktoś oglądał film A  poleca FilmB
komentarz 2 września 2015 przez Comandeer Guru (602,340 p.)
Tego akurat też jeszcze nie odkryłem, ale wiadomo co robi całe zapytanie ;)
0 głosów
odpowiedź 2 września 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
Czy to oby na pewno działa?

Założyłem tabelę gdzie id1 i id2 przyjmują wartości binarne:  jeżeli ktoś oglądał film B to id1 =1, jeżeli nie id1=0, podobnie w przypadku filmu A i id2. Teoretycznie powinno sumować tylko jeżeli id1=1 i id2=1. Ale grupuje i sumuje każdą kombinacje id1 i id2. Więc podaje trzy rózne wyniki z 0 1, 0 0, 1 1.

Drugi przypadek: funkcje LEAST i GREATEST zwracają Null jeżeli jeden z parametrów jest Null. Zmieniłem więc 0 na Null, ale dostałem dwa wyniki : 1 1 oraz Null Null.

W obu przypadkach wynik dwóch jedynek jest dobry ale dostaje również inne wyniki.

Poza tym wystarczy tylko jedna funkcja do poprawnego wyniku, albo LEAST albo  GREATEST.

Dlatego sądzę, że coś tu jest nie tak.

Pozatym wystarczy tylko jedna funkcja do poprawnego wyniku albo LEAST albo  GREATEST.

Dlatego sądzę, że coś tu jest nie tak.

Podobne pytania

0 głosów
1 odpowiedź 483 wizyt
0 głosów
2 odpowiedzi 194 wizyt
pytanie zadane 3 maja 2016 w SQL, bazy danych przez niezalogowany
0 głosów
0 odpowiedzi 177 wizyt

92,632 zapytań

141,500 odpowiedzi

319,880 komentarzy

62,013 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...