Autor Zpráva
AM_
Profil
Zdravím,
mám takovouhle nějakou strukturu:
items: id, cost, rating
items_properties: id_item, id_property (relace na tabulku properties, kde jsou popsany vlastnosti predmetu)

Potřeboval bych dotaz, který mi sečte počet předmětů, průměrnou cenu a celkový počet vlastností předmětů (v praxi je to blbost, jen zjednodušuji problém, který mám ve skutečnosti nad úplně jinými daty).
Napadlo mne toto:
SELECT
  COUNT(items.id),
  AVG(cost),
  COUNT(id_item)
FROM
  items
LEFT JOIN
  items_properties ON items.id=items_properties.id_item

Výsledkem je ale, že každý předmět se započítává tolikrát, kolik má vlastností (bál jsem se, že se to takhle bude chovat, vzhledem k tomu, jak spojování tabulek funguje). Když přidám GROUP BY items.id, tak je zase výsledek několik řádků, kde se mi pro každý předmět vytvoří jeden řádek a jeho vlastnosti se sečtou, ale já chci celkový součet všeho.
Teď mě napadá, že by to šlo pomocí vnořeného dotazu - nejdříve pomocí GROUP BY sečíst počet vlastností a v dalším dotaze to sečíst celkově, ale slyšel jsem, že MySQL neumí indexovat ve vnořených dotazech a že to může být opravdu pomalé.
Neexistuje tedy prosímvás jiné řešení bez vnořených dotazů? díky.
Kajman_
Profil *
SELECT
  COUNT(items.id),
  AVG(cost),
  (SELECT COUNT(*) FROM  items JOIN items_properties ON items.id=items_properties.id_item) prop_count
FROM
  items


Pokud nejsou properties bez vazby na item, nemusí tam být join k items.
AM_
Profil
díky :) takže ale bez poddotazu to nejde, co
TomášK
Profil
Mám podezření, že by to šlo přes GROUP BY WITH ROLLUP, ale nikdy jsem to nepoužil. Je to specialita MySQL, nevím, jestli to má podporu i jinde.

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