Fórum Root.cz

Hlavní témata => Sítě => Téma založeno: Wangarad 28. 05. 2019, 11:49:47

Název: SQL unikatne ID v select
Přispěvatel: Wangarad 28. 05. 2019, 11:49:47
Dobry den.
Mam otazku ci je mozne len pomocov SQL select fitrovat unikatne ID.
Priklad :
Kód: [Vybrat]
  $bests_user = User::where('status', User::STATUS_COMPLETED)
            ->with('account.user', 'money')
            ->where('cash','>','1500')
            ->orderBy('cash', 'desc')
            ->limit(5)
            ->get();

co mi vracia tabulku v style
1 - Janko - 2000
2 - Janko - 1980
3- Fero - 1765
4- Miso - 1587
5 - Janko - 1512

Je mozne upravit SQL tak aby mi to vzdy vracalo account len raz a len s navysov hodnotov? Teda
1- Janko - 2000
2 - Fero - 1765
3- Miso - 1587
4- Karol - 1555
5- Peter - 1531

?
Název: Re:SQL unikatne ID v select
Přispěvatel: e3k 28. 05. 2019, 12:17:44
treba pouzit group by a funciu MAX().

nieco ako:

Kód: [Vybrat]
select user, max(money)
from tabula
where cash > 1500
group by user
Název: Re:SQL unikatne ID v select
Přispěvatel: Miroslav Šilhavý 28. 05. 2019, 13:00:01
treba pouzit group by a funciu MAX().

Daleko správnější by bylo použít "DISTINCT ON (user)" a ORDER BY cash DESC.
Použití agregátu max() by fungovalo pouze ve speciálním případě, kdy by i ostatní sloupce byly stejné. DISTINCT ON () je univerzální řešení.
Název: Re:SQL unikatne ID v select
Přispěvatel: Wangarad 28. 05. 2019, 20:42:25
Bohuzial v laravel ani jedno nesplnilo funkciu  :(
Název: Re:SQL unikatne ID v select
Přispěvatel: Miroslav Šilhavý 28. 05. 2019, 20:43:53
Bohuzial v laravel ani jedno nesplnilo funkciu  :(

Pak Váš dotaz není na SQL, ale na něco úplně jiného.
Název: Re:SQL unikatne ID v select
Přispěvatel: al.da 28. 05. 2019, 22:34:38
treba pouzit group by a funciu MAX().

Daleko správnější by bylo použít "DISTINCT ON (user)" a ORDER BY cash DESC.
Použití agregátu max() by fungovalo pouze ve speciálním případě, kdy by i ostatní sloupce byly stejné. DISTINCT ON () je univerzální řešení.

nikde neni receno ze je to postgresql a v zadnem jinem 'slusnem' sql serveru jsem nevidel tuto syntaxi a urcite neni univerzalni a ani nejrychlejsi :)
Název: Re:SQL unikatne ID v select
Přispěvatel: Miroslav Šilhavý 28. 05. 2019, 22:38:10
nikde neni receno ze je to postgresql a v zadnem jinem 'slusnem' sql serveru jsem nevidel tuto syntaxi a urcite neni univerzalni a ani nejrychlejsi :)

O rychlost nejde, ale na položený dotaz není správná odpověď max() a GROUP BY, protože to dá správné výsledky jen za konkrétní situace - všechny ostatní sloupce vyjma částky budou totožné. Ale tento předpoklad nebyl položen.

V případě MySQL se to musí řešit subselectem, kdy vnitřní select vytáhne příslušný řádek pro danou osobu a vnější select se postará o setřídění výsledků.
Název: Re:SQL unikatne ID v select
Přispěvatel: Wangarad 29. 05. 2019, 00:34:10
subselect ! To je to co som hladal.
Dakujem pekne. Laravel a subselect su kamarati.
Mozte to uzavriet