Autor Zpráva
slon_cz
Profil
Dobrý den, chystám jednu funkci a potřeboval bych poradit.
v databázi mám tabulku "table" s obsahem:

uzivatel_id | skupina_id | datum | id 
 4754      |    F748       |  X       | 1 
 475       |    C447       |  X       | 2 
 47         |    A800       |  X       | 3 
 4           |    F748       |  X       | 4
a tak dále...

a já potřebuji na stránce vypsat všechny záznamy, kde v tabulce se se sloupeckem skupina_id shoduje 2 a vice zaznamu, tedy aby se mi na strance vypsala jen skupina "F748" a podtim zaznam s id 1 a 4, je to možné udělat v jednom záznamu? Můj nápad byl, že jakmile bch vyřešil to vypisování, tak záznamy pdo každou skupinou bych udělal zvlášť, mělo by to vlastní sql dotaz "WHERE skupina_id='".$skupina."'" podle prvniho dotazu, kde by mi prvni dotaz vypsal ty zaznamy, kde jsou vice, jak 2 zaznamy se shodnym skupina_id, bohuzel na ten prvni dotaz nemohu nijak prijit, jak ho napsat.

Budu rad za jakoukoliv radu, dekuji a preji hezky zbytek dne
Kajman
Profil
Mělo by jít něco jako
SELECT t.*
FROM   (SELECT skupina_id,
               Count(*) pocet
        FROM   `table`
        GROUP  BY skupina_id
        HAVING Count(*) > 1) dupl
       JOIN `table` t
         ON dupl.skupina_id = t.skupina_id
ORDER  BY t.skupina_id,
          t.uzivatel_id  
S tím, že když se změní skupina, vypíšete si nadpis skupiny.
Keeehi
Profil
slon_cz:
Případně pokud databáze umí window funkce tak to jde i bez toho subdotazu a joinu.
Kajman
Profil
Keeehi:

Jak bys to bez joinu i poddotazu napsal?

Edit: aha, vlastně přes QUALIFY, ale to umí jen některé z těch, co umí window funkce. Snad jen teradata.
slon_cz
Profil
Děkuji, bohužel databáze neumí window funkce, takže to budu muset řešit skrz Kajmanuv dotaz, děkuji.
Keeehi
Profil
Já tedy nevím zda tohle spadá pod window funkce ale napsal bych to takto.
WHERE
    count(*) OVER (GROUP BY skupina_id) > 1
Kajman
Profil
Ve where to nejde použít. Where omezuje řádky ještě před window finkcemi. Count by musel být v select části, celé to uzavřit do poddotazu a na tím výsledkem použt where.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0