Autor Zpráva
gaminn
Profil *
Zdravím,
v dotazu mám klauzuli GROUP BY a chtěl bych z agregovaného sloupce vybrat náhodnou hodnotu (stejným způsobem jako MIN() vybere nejmenší, MAX() největší...). Existuje něco takového?
gaminn
Profil *
Tak by to podle mě šlo tak, že omezím záznamy z tabulky přilepované pomocí LEFT JOIN:

SELECT * FROM hlavni_tabulka
LEFT JOIN tabulka ON tabulka.id = (SELECT id FROM tabulka WHERE hlavni_id = hlavni_tabulka.id ORDER BY RAND() LIMIT 1)

WHERE hlavni_tabulka.id = 1


Bohužel taková konstrukce funguje jen "někdy", opravdu náhodně. Někdy dotaz vrátí třeba i tři záznamy (k čemuž by logicky dojít nikdy nemělo - všechna id jsou PRIMARY KEY), někdy vrátí jen data z hlavni_tabulka, někdy vrátí vše tak, jak má.

Pokud ze subselectu oddělám ORDER BY RAND(), vše funguje perfektně (samozřejmě až na to, že nedochází k přilepení náhodného záznamu pomocí LEFT JOIN, ale jen jednoho pevně stanoveného).

Samotný subselect jsem testoval (bez klauzule WHERE) a funguje dobře, vždy vrátí jeden náhodný záznam.

Moc nechápu, jak je možné, že celý konstrukce nefunguje....
Kajman_
Profil *
možná by to mohlo jít takhle nějak

SELECT a.sloupec, (select jiny_sloupec from tabulka b where a.sloupec=b.sloupec order by rand() limit 1) jiny_sloupec FROM tabulka a group by a.sloupec;

ale rychlé to asi nebude a možná to jde lépe
gaminn
Profil *
Udělal jsem to tak, že (select jiny_sloupec from tabulka b where a.sloupec=b.sloupec order by rand() limit 1) jsem dal do klauzule FROM, na to pak nalepuji další tabulky.... Zajímalo by mě ale, proč ten první způsob, se subselectem v left join nefunguje.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0