Autor Zpráva
danhill
Profil
Ahoj,
prosím o pomoc s dotazem.

Mám tabulku a v ní:
|id|code|
----------
1|22|
2|15|
3|22|
4|15|
5|11|
6|22|

A potřebuji aby výsledek vypadal takto:

|id|code|pocet|
----------
1|22|3|
2|15|2|
3|22|3|
4|15|2|
5|11|1|
6|22|3|

Samozřejmě,že tohle mi nefunguje,protože výsledek je jeden řádek s počtem 6
SELECT *,COUNT(code) as pocet FROM tabulka

Tohle už je lepší,ale zase to nefunguje, protože pocet je vždy samozrejmě 1
SELECT *,COUNT(code) as pocet FROM tabulka GROUP BY ID

Myslím,že pro vás to bude hračka.
Děkuji moc.
juriad
Profil
V poddotaze si spočítáš počty výskytů, a ty pak připojíš k celé tabulce.

SELECT t.*, p.pocet
FROM tabulka t
JOIN (
  SELECT code, COUNT(*) AS pocet
  FROM tabulka
  GROUP BY code
) x ON x.code = t.code
ORDER BY t.id
danhill
Profil
woow děkuji, to je rychlest - ušetřil jsi mi minimálně dvě hodiny bádání pokus/omylů ... :)

Jen poddotaz - já vím,že jsem na ty spojené dotazy lempl a pořád s tím bojuju,ale nemělo by tam být INNER JOIN?

Každopádně děkuji moc.
pcmanik
Profil
danhill:
JOIN = INNER JOIN iný rozdiel v tom nieje.
Kajman
Profil
Pokud může code nabývat null hodnoty, tak je potřeba dotaz upravit. V mysql by stačilo místo rovnítka dát <=>.

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: