ugrás a tartalomhoz

JOIN + LIMIT + GROUP BY + COUNT?

EL Tebe · 2012. Feb. 18. (Szo), 11.57
SELECT m.megye, m.megye_id, a.megyehez_tartozo_adat
FROM megyek AS m
INNER JOIN adatok AS a
USING ( megye_id )
Azt szereném valahogy megoldani, hogy az iménti lekérdezés megyénként (m.megye_id-nként) maximum 3 db. megyehez_tartozo_adat találatot adjon vissza..

megye1->adat1
megye1->adat2
megye1->adat3
megye2->adat1
megye2->adat2
megye3->adat1
megye3->adat2
megye3->adat3

Kiegészítés: mysql adatbázisról van szó
 
1

Nem tudom, ez jó-e

Pepita · 2012. Feb. 18. (Szo), 16.33

SELECT m.megye, m.megye_id, 
( SELECT a.megye_id, a.megyehez_tartozo_adat FROM adatok AS a LIMIT 3 )
FROM megyek AS m 
WHERE m.megye_id = a.megye_id 
GROUP BY m.megye_id
Gondolom ehhez vagy két lekérdezést kell összefűzni, vagy tárolt eljárásban végigiterálni a megye táblán, létrehozni egy temp táblát mindig hozzáadva a szükséges új rekordokat, majd azt egy SELECT-el visszaadni. Utána viszont meg is kell szüntetni a temp táblát.
2

oracle

Raziel Anarki · 2012. Feb. 18. (Szo), 17.20
mivel nem írtad, milyen adatbázist használsz, írok egy ORACLE-s példát, hátha
SELECT 
    m.megye, 
    m.megye_id, 
    a.megyehez_tartozo_adat, 
    ROW_NUMBER() OVER (PARTITION BY m.megye_id ORDER BY m.megye_id) AS row
FROM 
    megyek AS m INNER JOIN adatok AS a USING (megye_id)
WHERE 
    row < 4
(amúgy ezeket az analitikus funkciókat hiányolom nagyon néha MySQL-ből)
3

Ügyes. Köszönöm, ezt

kuka · 2012. Feb. 20. (H), 11.22
Ügyes. Köszönöm, ezt elraktározom.

Érdekes, hogy PostgreSQL-ben ugyanez a window szintaxis de egy dolog nem működik: a where-ben nem látható a row. Ezért muszáj al-lekérdezésbe gyömöszölni a window részt.
4

ööö

razielanarki · 2012. Feb. 20. (H), 20.17
gyors példa volt emlékezetből, lehetséges h oracle-ben sem látszik és ott is allekérdezésben kell legyen :)
(illetve egyből a where-ben)

ha jól tévedek csak az order by látja az azonos szinten lévő neveket
5

mysql,

EL Tebe · 2012. Feb. 21. (K), 12.42
de minden megoldás érdekel, mert egy problémára, sok apró plussz infóval tanul igazán az ember.