Dotaz přes dvě tabulky s agregační funkcí rubrika: Databáze: SQL

5 stirl021
položil/-a 24.2.2017
 
upravil/-a 24.2.2017
data
 
|industry_id|   date   | pe |
 ===========================
|110        |2015-05-14|14.3|
|745        |2015-05-14|1.7 |
|745        |2014-03-15|10.0|
|110        |2015-08-14|11.1|
 
averages
 
|industry_id|   date   | pe |
 ===========================
|110        |2015-05-14|17.7|
|745        |2014-03-15|5.85|

Je způsob, jak jedním dotazem získat výsledek, který vypočítá avg(pe) z tabulky data a přilepí k ní pe z tabulky averages? Tj. abych viděl, jestli si ta čísla odpovídají (což by měly). Hodnoty v averages.pe jsou výsledkem avg(data.pe).

Požadovaný výsledek:

|industry_id| avg(pe)  | pe |
 ===========================
|110        |17.7      |17.7|
|745        |5.85      |5.85|

Trochu (dost) s tím bojuju a zatím se nedaří. Díky

odkaz Vyřešeno
10 ondrej.zara
odpověděl/-a 24.2.2017
select data.industry_id, avg(data.pe), max(averages.pe) 
from data 
join averages on data.industry_id = averages.industry_id
group by data.industry_id

Komentáře

  • stirl021 : Děkuju, funguje. Jenom nechápu, proč je v selectu max(). 25.2.2017
  • stirl021 : Už vím, protože s SQL jdou vybírat jen sloupce, podle kterých se seskupuje nebo na které se použije agregační funkce. Akorát mi to připadá, že je to trochu workaround. 25.2.2017
  • podhy : jaký workaround? chcete provádět výpočty (agregace, nalezení nejvyššího prvku) na nějaké skupině dat (industry), je tedy vcelku logické že napřed musíte takovou skupiny určit / vytvořit...jak byste to chtěl jinak řešit? 25.2.2017
  • stirl021 : Já ale v tabulce averages nechci hledat nejvyšší hodnotu. V tabulce averages je pro industry_id = 110 pouze jeden řádek a v tom je sloupec pe s hodnotou 17.7. 25.2.2017

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.