SQL unikatne ID v select

SQL unikatne ID v select
« kdy: 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

?


e3k

  • ***
  • 209
    • Zobrazit profil
    • E-mail
Re:SQL unikatne ID v select
« Odpověď #1 kdy: 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

Re:SQL unikatne ID v select
« Odpověď #2 kdy: 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í.

Re:SQL unikatne ID v select
« Odpověď #3 kdy: 28. 05. 2019, 20:42:25 »
Bohuzial v laravel ani jedno nesplnilo funkciu  :(

Re:SQL unikatne ID v select
« Odpověď #4 kdy: 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.


al.da

Re:SQL unikatne ID v select
« Odpověď #5 kdy: 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 :)

Re:SQL unikatne ID v select
« Odpověď #6 kdy: 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ů.

Re:SQL unikatne ID v select
« Odpověď #7 kdy: 29. 05. 2019, 00:34:10 »
subselect ! To je to co som hladal.
Dakujem pekne. Laravel a subselect su kamarati.
Mozte to uzavriet