Topic: DISTINCT atvirkščiai

Sveiki, gal kas galėtų patarti kaip realizuoti vieną užklausa ?

PVZ.: reikia iš lenteles išrinkti tik pasikartojančias reikšmes atvirkščiai nei "distinct" kur ignoruoja pasikartojimą .
jei yra irašai

name
-------
a1
a2
a2
a3
a4
a4
a5

rezultatas

-------
a2
a2
a4
a4

Busiu labai dėkingas už bet kokius pasiūlymus

Re: DISTINCT atvirkščiai

Reikia:
a) grupuoti pagal tą stulpelį (GROUP BY);
b) skaičiuoti kiek tose grupėse yra reikšmių (COUNT(stulpelis));
c) rezultatuose pateikti tik reikšmes, kur COUNT(stulpelis) daugiau už vieną;

Re: DISTINCT atvirkščiai

Labai ačiū, iš esmes pavyko, tik rezultate išveda viena kartą reikšmę kuri pasikartoja, o man reikia, kad išvestu tiek kartu kiek pasikartuoja ir tik pasikartojančius.

 SELECT a_nr, COUNT(*) FROM lentele GROUP BY x HAVING COUNT(a_nr) >1;

Ir dar vienas patobulinimas, kad rastu pagal dviejų laukelių sutapimą, man niekaip nepavyksta
pvz jei lentele

a_nr     a_nr2    obj
----------------------
a1       12         a
a2       12         b
a2       13         c
a2       13         d
a3       12         e
a4       15         f
a4       20         g
a5       30         h

Rezultatas butu toks

a2       13         c
a2       13         d

Pagal mano nepatyrusio specialisto logiką, užklausa turėtų buti tokia:

SELECT * FROM lentele GROUP BY obj HAVING  COUNT(a_nr)=COUNT(a_nr2) AND COUNT(a_nr)>1 AND COUNT(a_nr2)>1

bet niekas gero nesigauna rezultatas ne tas.
Prašau padekite

Re: DISTINCT atvirkščiai

gandza_web wrote:

Labai ačiū, iš esmes pavyko, tik rezultate išveda viena kartą reikšmę kuri pasikartoja, o man reikia, kad išvestu tiek kartu kiek pasikartuoja ir tik pasikartojančius.

 SELECT a_nr, COUNT(*) FROM lentele GROUP BY x HAVING COUNT(a_nr) >1;

O kuo blogai išvesti elementą, kuris turi pasikartojimų ir skaičių - kiek tų pasikartojimų - pagal tai galėsi paskui atlikti reikiamus veiksmus.

Jeigu jau labai labai reikia išvesti visus pasikartojimus tai realiai reikia sujungti (INNER JOIN) gautą užklausą su pradine lentele pagal tuos alementus ir tada turėsi reikiamą rezultatą.

Re: DISTINCT atvirkščiai

Turiu tokią užduotį, tarkim yra kažkoks testas 2 klausimai ir  kas atliko testa.

klausymas1  klausymas2   Vardas
----------------------------------------
at1              at2                vardenis
at5              at3                Povilas
at1              at2                Audrius
ato              at4                Arturas

Užduotis: išrinkti visus, kurie pasirinko vienodus atsakymus

klausymas1  klausymas2   Vardas
----------------------------------------
at1              at2                vardenis
at1              at2                Audrius

Atsakyma reikia kad gražintų MySQL nenaudojant papildomu porogramu php ....

6 (edited by criminal 2009-12-21 23:59:38)

Re: DISTINCT atvirkščiai

SELECT t1.* 
   FROM t1
   INNER JOIN (
      SELECT klausimas1, klausimas2, COUNT(*)
         FROM t1
         GROUP BY klausimas1, klausimas2
         HAVING COUNT(*) > 1
   ) AS t2
      ON t1.klausimas1= t2.klausimas1 AND t1.klausimas2= t2.klausimas2;

7 (edited by gandza_web 2009-12-23 12:49:46)

Re: DISTINCT atvirkščiai

Ačiu visiems, aš parašiau truputi kitaip, nežinau ar gerai bet viskas veikia gerai

select pirmas.vardas, pirmas.kl1, pirmas.kl2 from lentele as pirmas
inner join lentele as antras ON pirmas.kl1 = antras.kl1 AND pirmas.kl2 = antras.kl2 group by pirmas.kl1 having count(antras.kl1)>1;