SQL dotaz - menší rozcvička
Ahoj.
Určitě to víte
Mám následující dotaz:
select p.products_id, p.products_model, pd.products_name, m.manufacturers_name, p.products_quantity,
p.products_image, p.products_weight, p.manufacturers_id, p.products_tax_class_id, p.abra_unit,
final_price, order_count, view_count, abra_sc_id, abra_srm_id
from listing_table_products p
left join listing_table_products_name pd on p.products_id=pd.products_id
left join listing_table_manufacturers m on p.products_id=m.products_id order by pd.products_name
A z tohoto dotazu, který už je defakto hotový potřebuji vytáhnout maximální cenu (final_price) a minimální cenu (final_price).
Toto je jednoduché (fce MIN a MAX). Já ovšem potřebuji k přislušné maximální a minimální ceně vytáhnout i její příslušné products_tax_class_id.
Jak to provést?
Díky
no tak ten dotaz nie je vobec defacto hotovy. chces tam prasnut funkciu min a max a nasledne groupovat cez znacne mnozstvo poli, co je uplne zly postup. spravne je spravit si group potrebnych hodnot pre nejaky identifikator a potom k nemu dalej prijoinovat cez dane ID ostatne polia s popismi.
dalej ... nie je jasne z akej tabulke je pole final_price (chyba tam alias). a tiez polia order_count a podobne.
Zisiel by sa zjednoduseny ERD diagram aj s kardinalitou tychto tabuliek, lebo takto len tapame v tme.
Mě by stačilo, klidně to rozdělit na dotazy třeba 2.
Hlavně , aby tam bylo MIN(final_price) a k němu příslušné p.products_tax_class_id a naopak největší MAX(final_price) a k němu příslušné p.products_tax_class_id
Klidně 2 samostatné dotazy (jeden min a druhý max)
ten ERD diagram by teda nebol?
Předně děkuji za ochotu. Diagram k tomu bohužel nemáme, takže nemůžu dodat .
Zkouším to pomocí vnořeného selectu, ale ten taky nefunguje:
select p.products_tax_class_id from listing_table_products p left join listing_table_products_name pd on p.products_id=pd.products_id left join listing_table_manufacturers m on p.products_id=m.products_id where final_price = (SELECT MAX(final_price) as maxcena from listing_table_products p left join listing_table_products_name pd on p.products_id=pd.products_id left join listing_table_manufacturers m on p.products_id=m.products_id order by pd.products_name)
Nevíte někdo proč ani toto nefunguje?
Taky nefunguje:
select p.products_tax_class_id from listing_table_products p left join listing_table_products_name pd on p.products_id=pd.products_id left join listing_table_manufacturers m on p.products_id=m.products_id where final_price = (SELECT MAX(final_price) as maxcena from listing_table_products p1 left join listing_table_products_name pd1 on p1.products_id=pd1.products_id left join listing_table_manufacturers m1 on p1.products_id=m1.products_id order by pd1.products_name)
Hlásí:
Could not run query: Can't reopen table: 'p'
uff, no v takom matrixe len tazko najdes chybu. trochu by to chcelo aj strukturovat, nech sa to da citat.
V ktorej tabulke je vlastne pole final_price?
A proc, ze Ti nestačí to
select
p.products_tax_class_id,MAX(final_price)
from listing_table_products p group by p.products_tax_class_id ?
Já Mysql rozumím jako koza petrželi, nicméně googlil jsem co to znamená ta chybová hláška Can not reopen, protože tenhle select je syntaticky validní, ačkoliv když se na něj podivám tak tam vidí zbytečné joiny, order by, které tam nemá co dělat a to = také není v souladu s tím, co chceš. Nicméně zpět k té chybě Can not reopen četl jsi co jsem vygooglil? Nemužeš dvakrát odkazovat stejnou temporary tabulk u - mě by spíš zajímalo proč je to kurna temporary tabulka
Ot:mě by spíš zajímalo proč je to kurna temporary tabulka
To by byla dlouha historie. V kazdem pripade to vyzkousim.
No dlouhá historie - jen jsem nakouk co to dělá v Mysql a je to to co v Oracle, pokud jsem koukal správně - data přežjívají jen session, tak jak v tom mohou být produkty? Pokud je to nějaký temp do kterého se to lije, tak to nahrad zdrojem (pokud výkon bude stačit) z hardwarové tabulky.
OK. Otestuji to a pak vam dam vedet.
Nepocital jsem s tim, ze to bude tak komplikovane.
Zkouset to ovsem budu az v utery.
Zatim tedy vysledek zadny. Presto diky vsem zucastnenym.
Sorry za cz, tablet