Portál AbcLinuxu, 4. listopadu 2025 08:58
+----------+-----------------------------+ | domain | email | +----------+-----------------------------+ | atlas.cz | karel@atlas.cz | | atlas.cz | pepa@atlas.cz | | atlas.cz | borivoji@atlas.cz | | atlas.cz | magdalena@atlas.cz | +----------+-----------------------------+mam zde hodne atlas.cz, seznam.cz gmail.com atd.. A potrebuju od kazde domeny vybrat pouze 10 emailu idealne v jednom selectu. Je to vubec mozne? Uz par hodin se snazim spravne zeptat google a zatim bez uspechu, Je mi jedno zda to bude postgre, nebo mysql. Projizdim dokumentaci, ale nenapada me ani moc jak bych to realizoval a kdyz to bude v kodu, bojim se spatneho vykonu, samozrejme me napadlo udelat neco takoveho:
adr_list = []
domains = db.query("select domain, count(email) as cnt from recipients group by domain having cnt > 10")
adr_list.append(db.query("""select email from recipients where domain not in (select domain from (select domain, count(email) as cnt from recipients group by domain having cnt > 10) as tmp);""")
for dom in domains:
    adr_list.append("select email from recipients LIMIT 10;" % dom)
ale radeji bych to udelal spravne a neco se rovnou priucil.
Predem dekuji za rady a postouchnuti...
            Řešení dotazu:
SELECT 
 *
FROM (
    SELECT
        ROW_NUMBER() OVER (PARTITION BY domain ORDER BY email) AS rowno,
        email
    FROM 
        emails
) t
WHERE rowno <= 10
        
Nezkoušel jsem to, možná tam jsou nějaké detaily špatně. V MySQL to jde zprasit přes proměnnou, což většinou funguje. Dá se udělat i korelovaný poddotaz, který bude počítat rowno, ale efektivita jde do háje.
            
        Tiskni
            
                Sdílej:
                
                
                
                
                
                
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.