NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: MSSQL - jak vrátit všechny možné kombinace řádků s cenou

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
Wayne
Člen
Avatar
Wayne:13.9.2022 20:04

Ahoj,

chtěl bych se zeptat jestli by někdo nevěděl jak vrátit všechny možné kombinace řádků s cenou z jedné tabulky, kde součet ceny = 500. Výsledkem může být např jeden záznam, který má odpovídající hodnotu = 500, ale také může být výsledkem několik záznamů, který dohromady dají odpovídající hodnotu 500.

Popravdě mě v tuto chvíli nenapadá vůbec žádné řešení proto bych byl vděčný každému, který by mi byl schopen poradit.

Předem díky

 
Odpovědět
13.9.2022 20:04
Avatar
Petan
Člen
Avatar
Petan:14.9.2022 8:34

Co je součet ceny ? několik sloupců ? V tom případě SELECT * FROM tabulka WHERE sloupec1 + sloupec2 + sloupec3 ... = 500

 
Nahoru Odpovědět
14.9.2022 8:34
Avatar
Odpovídá na Wayne
Petr Štechmüller:14.9.2022 9:45

Ahoj, tohle je hrozně pěkná úloha na algorizmizaci. Podobný problém je třeba u automatu na vrácení mincí.

Zadání není úplné.

  • Je možné použít jednu položku vícekrát?
  • Může mít více položek stejnou cenu?

Tyto faktory ovlivní výslednou složitost.

Za předpokladu, že použiju každou položku maximálně jednou a každá položka bude mít unikátní cenu, bych postupoval takto:

Vezmi položku s nejvyšší možnou cenou menší, než je výsledná suma.
Najdi další nejvyšší možnou položku tak, aby součet byl menší/roven výsledné sumě.
Opakuj, dokud nedojdou položky, nebo nezískáš sumu, nebo nepřetečeš.
V případě přetečení víš, že tohle je špatná cesta a musíš odebrat poslední vybranou položku a najít další vhodnou.

Tohle je hodně hrubý návrh algoritmu. Můžou se v něm vyskytovat chyby. Netestoval jsem to, je to pouze vymyšlený z hlavy.

Nahoru Odpovědět
14.9.2022 9:45
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
LacoS.
Člen
Avatar
LacoS.:11.11.2022 23:10

mozes si to na zaciatok zjednodusit

... pre 2 polozky:

SELECT a.id, b.id
  from tabulka as a, tabulka as b
where
  a.cena<500 and
  b.cena<500 and
  a.cena+b.cena= 500
order by a.cena

pre 3 polozky:

SELECT a.id, b.id, c.id
  from tabulka as a, tabulka as b, tabulka as c
where
  a.cena<500 and
  b.cena<500 and
  c.cena<500 and
  a.cena+b.cena+c.cena= 500
order by a.cena
 
Nahoru Odpovědět
11.11.2022 23:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.