Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 23250|Odpověď: 11

[Nové číslo] Jak vybrat nejlevnější n pokojů

[Kopírovat odkaz]
Zveřejněno 05.12.2018 21:32:38 | | | |
Nyní jsou k dispozici dva stoly, room_type a room_info
Jsou zde 3 hotely s doklady 1~3. Každý hotel má pak 3 typy pokojů s ID 1~9.
room_type obsahuje jméno, ID a odpovídající hotelové ID každého typu pokoje.
V room_info je uložena cena za každý den, každý typ místnosti a počet zbývajících pokojů.
Témata, na která bych se chtěl zeptat, jsou:
Určete časové rozmezí a počet rezervovaných pokojů, vypytujte se na hotely, typy pokojů a jejich průměrné ceny, které splňují podmínky (čas, počet zbývajících pokojů), a seřadíte je podle průměrné ceny od nejnižší po nejvyšší. Výsledky zahrnují hotely, vybrané kombinace a množství pokojů a nejnižší průměrnou cenu.
##不要求为同一房型, ale musí to být stejný hotel a můžete změnit typ pokoje během cesty.
##比如, čas přihlášení je 2018-11-14~2018-11-15 a počet rezervovaných pokojů je 5
##返回选择酒店A, 11-14 vyberte 4 typy pokojů s ID 3, 1 typ pokoje s ID 2, 11-15 vyberte 3 typy pokojů s ID 3, 2 typy pokojů s ID 2 a nejvyšší cena je 2000
##老师要求只能用sql语句, implementace MySQL nemůže používat Python, C++ atd
Nenapsal jsem to celý den a na internetu jsem neviděl podobné téma, tak jsem přišel požádat bohy o pomoc a chci se zeptat vás, jak toho dosáhnout, děkuji~







Předchozí:Sdílení zkušeností programu PHP program ape, které se sám hlásí
Další:Přijímací zkoušky na postgraduální studium 2019 Politika Xu Tao a materiály Xiao Xiuronga na sprint
Zveřejněno 06.12.2018 17:00:58 |
Tento příspěvek byl naposledy upraven Miaolinsenem dne 6. 12. 2018 v 17:03

Nedělal jsem to s mysql, ale s mssql:


/*
Určete časové rozmezí a počet rezervovaných pokojů, vypytujte se na hotely, typy pokojů a jejich průměrné ceny, které splňují podmínky (čas, počet zbývajících pokojů), a seřadíte je podle průměrné ceny od nejnižší po nejvyšší. Výsledky zahrnují hotely, vybrané kombinace a množství pokojů a nejnižší průměrnou cenu.
##不要求为同一房型, ale musí to být stejný hotel a můžete změnit typ pokoje během cesty. -- Parsování: To znamená, že není třeba zvažovat typ místnosti, pouze počet místností
##比如, vyberte čas přihlášení 2018-11-14~2018-11-15 a počet rezervovaných pokojů je 5 -- Analýza: Hotel musí být v datovém rozmezí a je poptávka po počtu pokojů každý den (pokud v určitý den nikdo není, nesplní standard)
##返回选择酒店A, 11-14 vyberte 4 typy pokojů s ID 3, 1 typ pokoje s ID 2, 11-15 vyberte 3 typy pokojů s ID 3, 2 typy pokojů s ID 2 a nejvyšší cena je 2000 -- Analýza: Vypočítat průměrnou cenu podle minimální konfigurace za den
##老师要求只能用sql语句, implementace mysql, nemůže používat python, c++ atd. */


-- Příchozí parametry, datový rozsah, počet potřebných místností
DEKLARUJTE @sdate DATUM = '2018-11-14';
DEKLARUJTE @edate DATUM = '2018-11-15';
DEKLARUJTE @roomnum INT = 5;


-- Spočítejte počet dní pobytu
DEKLARUJTE @days INT;
SET @days = DATEDIFF(DEN, @sdate, @edate)+1;

-- Číslo hotelu, které odpovídá datovému rozmezí, počet pokojů
POKUD EXISTUJE(vyberte * z tempdb.dbo.sysobjects kde id = object_id(N'tempdb.. ##temp_hotel') a typ='U')
ZAČNĚTE
    Drop table ##temp_hotel
KONEC

VYBERTE ta.hotel_id do ##temp_hotel Z
(VYBRAT ri. [datum], rt.hotel_id, SUM(ri.zůstat) room_num Z room_info RI LEFT JOIN room_type rt na ri.room_id=rt.room_id kde @sdate <= [datum] a [datum] <= @edate SKUPINA PODLE ri. [datum],rt.hotel_id MÍT SUM(zůstat) >= 5) ta
ZAŘAĎTE PODLE ta.hotel_id MÁ COUNT(*) = @days



-- Vypočítané podle hotelu (nastavte minimální typ pokoje na den)

POKUD EXISTUJE(vyberte * z tempdb.dbo.sysobjects kde id = object_id(N'tempdb.. ##temp_result') a type='U')
ZAČNĚTE
    Drop table ##temp_result
KONEC
-- Provizorní tabulka výsledků Hotelová rande Typ pokoje ID Typ pokoje Název pokojů Počet pokojů Cena hotelu Denní celkový počet Hotel Denní průměrná cena hotelu Hotel Celková cena hotelu Celková denní průměrná cena hotelu Celková denní cena pokoje
VYTVOŘIT TABULKU ##temp_result(
    hotel_id INT,
    hotel_name varchar(255),
    [datum] DATUM,
    room_id INT,
    room_name VARCHAR(255),
    room_num INT,
    roomprice DECIMAL,
    dsumprice DESETINNÉ ČÍSLO,
    DAVGPRICE DESETINNÁ ČÍSLA,
    sumpric DECIMAL,
    sumavgpric DECIMAL
)

DEKLARUJTE @hid INT; -- Hotelový průkaz
DEKLARUJTE @infoid INT; -- informační ID
--potvrdit, že kurzor je kolekce
DECLARE my_cursor kurzor pro (SELECT hotel_id z ##temp_hotel);
--Otevřít kurzor--
Otevři my_cursor
--Proměnné kurzoru smyčky startu--
Přines další z my_cursor do @hid
zatímco @@FETCH_STATUS = 0 -- vrací stav posledního kurzoru vykonaného příkazem FETCH --
ZAČNĚTE      
    -- Na základě ID hotelu se účtuje opakované datum
    POKUD EXISTUJE(vyberte * z tempdb.dbo.sysobjects kde id = object_id(N'tempdb.. ##temp_room') a type='U')
    ZAČNĚTE
        Drop table ##temp_room
    KONEC

    -- Hotely podle data, s pokoji seřazenými podle data Cena
    VYBERTE info_id, [datum], cena, zůstat room_id DO ##temp_room Z dbo.room_info KDE @sdate <= [datum] a [datum] <= @edate A ZŮSTAŇTE > 0 A room_id DO (VYBERTE rt.room_id Z dbo.room_type rt, KDE rt.hotel_id=@hid) OBJEDNÁVKA PODLE [datum] ASC, cena ASC
   
   
    DECLARE @thisrdate DATE = NULL; -- Datum
    DEKLARUJTE @thisrnum INT=0; -- Počet vybraných pokojů k aktuálnímu datu
   
    DECLARE @rdate DATE = NULL; -- Datum
    DEKLARUJTE @rmnum INT = 0; -- Počet pokojů podle typu místnosti
   
    -- Cyklus podle data
    DECLARE @my_cursor2 KURZORU;
    nastavte @my_cursor2 = KURZOR PRO SELECT info_id Z ##temp_room POŘADÍ PODLE [datum] ASC, cena ASC
    OTEVŘETE @my_cursor2;
    APORTUJ DALŠÍ OD @my_cursor2 DO @infoid
    WHILE(@@FETCH_STATUS=0)
    ZAČNĚTE
        --##temp_result
        SELECT @rmnum=zůstat, @rdate=[datum] OD ##temp_room KDE info_id=@infoid
        POKUD (@thisrdate JE NULOVÁ NEBO @thisrdate != @rdate)
        ZAČNĚTE
            TISKOVÁ @rdate
            SADA @thisrdate = @rdate;
            SET @thisrnum = 0;
        KONEC
        -- Typ místnosti pro výběr dávkovacích form
        IF(@thisrnum <= @roomnum)
        ZAČNĚTE
            IF (@thisrnum + @rmnum > @roomnum)
            ZAČNĚTE
                -- Počet pokojů, které musíte použít
                SADA @rmnum = @roomnum-@thisrnum;
            KONEC
        KONEC
        DALŠÍ   
        ZAČNĚTE
            -- Na toto datum není potřeba žádné místo
            NASTAVTE @rmnum = 0;
        KONEC
        
        IF (@rmnum > 0)
        ZAČNĚTE
            -- Přičíst výsledky podle stanoveného počtu
            VLOŽTE DO ##temp_result(hotel_id, hotel_name, [datum], room_id, room_name, room_num, roomprice, dsumprice, davgprice, sumpric, sumavgpric)
            VYBERTE @hid, '', @thisrdate, room_id, '', @rmnum, cena, 0, 0, 0 OD ##temp_room KDE info_id = @infoid
            
            -- Počet pokojů dosáhl vypočítané průměrné ceny
            SADA @thisrnum = @thisrnum + @rmnum;
            IF (@thisrnum = @roomnum)
            ZAČNĚTE
                -- Celková cena podle hotelu, vypočítána pro data
                AKTUALIZACE ##temp_result NASTAVTE dsumprice=(VYBERTE SUM(room_num*roomprice) Z ##temp_result TR, KDE tr.hotel_id=@hid A TR.[ datum]=@thisrdate) KDE hotel_id=@hid A [datum]=@thisrdate
                -- Vypočítat průměrnou cenu pokojů podle hotelu, celkovou cenu podle data
                AKTUALIZACE ##temp_result NASTAVTE davgprice=(dsumprice/@roomnum) KDE hotel_id=@hid A [datum]=@thisrdate
            KONEC
        KONEC

        FETCH NEXT Z @my_cursor2 DO @infoid;
    KONEC   
    blízké @my_cursor2;  --Vypni kurzor
    deallocate @my_cursor2;   --kurzor pro uvolnění

    -- Podle hotelu vypočítejte celkovou cenu hotelu
    AKTUALIZACE ##temp_result NASTAVTE sumpric=(VYBERTE SUM(room_num*roomprice) OD ##temp_result TR, KDE tr.hotel_id=@hid) KDE hotel_id=@hid
    -- Vypočítat průměrnou denní cenu celého pokoje v hotelu
    AKTUALIZACE ##temp_result SET sumavgpric=(sumpric/@roomnum/@days) KDE hotel_id=@hid

    FETCH next z my_cursor do @hid – jdi na další kurzor, žádné mrtvé smyčky
KONEC  
Zavřít my_cursor – zavřít kurzor
deallocate my_cursor - uvolnit kurzor


-- Přidejte název hotelu a typ pokoje k dočasnému stolu
AKTUALIZACE ##temp_result NASTAVTE hotel_name=(VYBERTE ht.hotel_name Z dbo.hotel HT, KDE ht.hotel_id=##temp_result.hotel_id),
room_name=(VYBERTE rt.room_name Z dbo.room_type rt, KDE rt.room_id=##temp_result.room_id)


-- Zkontrolujte výsledky z tabulky výsledků
VYBERTE * Z ##temp_result




-- Ukončení vyčištění dočasných tabulek
POKUD EXISTUJE(vyberte * z tempdb.dbo.sysobjects kde id = object_id(N'tempdb.. ##temp_hotel') a typ='U')
ZAČNĚTE
    Drop table ##temp_hotel
KONEC
POKUD EXISTUJE(vyberte * z tempdb.dbo.sysobjects kde id = object_id(N'tempdb.. ##temp_room') a type='U')
ZAČNĚTE
    Drop table ##temp_room
KONEC
POKUD EXISTUJE(vyberte * z tempdb.dbo.sysobjects kde id = object_id(N'tempdb.. ##temp_result') a type='U')
ZAČNĚTE
    Drop table ##temp_result
KONEC

Partitura

Počet účastníků1MB+1 přispět+1 Zhroucení důvod
Admin + 1 + 1 Nadšení z pomoci druhým!

Zobrazit všechna hodnocení

 Pronajímatel| Zveřejněno 06.12.2018 14:11:48 |
xzxmustwin Zveřejněno 6. 12. 2018 11:58
Upřímně, struktura této tabulky je trochu nereálná

Domácí úkoly, které zadával učitel databáze emmmm, možná byly opravdu nerozumné, a neviděl jsem to, pokud jsem se to nenaučil dobře...
Klíčem jsou ale stále nápady na řešení problémů, chtěl bych se zeptat přátel, jestli máte nějaké tipy?
 Pronajímatel| Zveřejněno 06.12.2018 14:09:20 |
lzzsf zveřejněno 6. 12. 2018 09:07
MySQL je zastaralý, žádný klient, dej mi skript pro SQL Server

Promiňte, SQL Sever jsem ještě nepoužil, možná proto, že je to jen výuka, takže nás učitel požádal, abychom použili mysql. Pokud jsou vaši přátelé ochotni sdílet své nápady, moc děkuji.
Zveřejněno 05.12.2018 21:57:13 |
Půjdu do QQ skupiny nabídnout odměnu 10 jüanů, jestli vám někdo pomůže odpovědět ne
Zveřejněno 06.12.2018 7:56:39 |
Pomoc
Zveřejněno 06.12.2018 9:07:08 |
MySQL je zastaralý, žádný klient, dej mi skript pro SQL Server

Partitura

Počet účastníků1MB+1 přispět+1 Zhroucení důvod
Admin + 1 + 1 Nadšení!

Zobrazit všechna hodnocení

Zveřejněno 06.12.2018 11:24:25 |
lzzsf zveřejněno 6. 12. 2018 09:07
MySQL je zastaralý, žádný klient, dej mi skript pro SQL Server

Doporučuje se o nápadu mluvit a nechat pronajímatele použít tento nápad jako referenci, což by mělo být také možné
Zveřejněno 06.12.2018 11:58:37 |
Upřímně, struktura této tabulky je trochu nereálná

Partitura

Počet účastníků1MB+1 přispět+1 Zhroucení důvod
Admin + 1 + 1 Nadšení!

Zobrazit všechna hodnocení

 Pronajímatel| Zveřejněno 06.12.2018 14:07:29 |
Publikováno 5. 12. 2018 21:57
Půjdu do QQ skupiny nabídnout odměnu 10 jüanů, jestli vám někdo pomůže odpovědět ne

Díky, pokud je někdo ochotný odpovědět, pošlu vám červenou obálku :)
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com