Nejdřív jedna drobná výtka (k příkladu s Rankem): Píšete "Ekvivalentní SQL příkaz je...", ale výsledek dotazu ekvivalentní není.
Pak nevím, jestli je správně použít v ORDER BY jméno sloupce ID, které není uvedeno v na řádku SELECT.
Proč není použito "ORDER BY product, sale_price" ? Tím by se podle mě vyřešily obě mé výtky - nebo se mýlím?
Nemohu si pomoct, ale když porovnám obě výsledné tabulky, tak mi přijdou stejné - které řádky nejsou stejné (tabulek je tam víc, možná se každý díváme někam jinam)? Použití nezobrazeného sloupce v ORDER BY je korektní (v této pozici může být i libovolný výraz). ORDER BY product, sale_price jsem nikde nepoužil z toho důvodu, že jsem nikde nechtěl řadit podle produktu a ceny, tj. rank není podle ceny, ale podle data. tj. prvý nákup, druhý nákup, atd. Pokud bych chtel rank podle ceny, tj. nejdražší, .. pak bych řadil podle ceny.
Podle mě se liší poslední tři řádky:
v ukázce s funkcí report2() jsou to
2007-10-13 | pecivo | 3 | 1
2007-10-10 | pecivo | 3 | 2
2007-10-12 | pecivo | 4 | 3
a v ukázce s Selectem jsou to
2007-10-10 | pecivo | 3 | 1
2007-10-12 | pecivo | 4 | 2
2007-10-13 | pecivo | 3 | 3
což má k "ekvivalentnosti" (jak nás to učí ve škole) dost daleko.
Podle mě by z hlediska čitelnosti článku bylo lepší, kdyby oba výsledky byly skutečně ekvivalentní.
A k tomu ID v ODRER BY: nevíte prosím, jestli to, co píšete, je vlastnost SQL podle normy nebo jen nějakých SQL variant?