Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 23250|Odpoveď: 11

[Nové číslo] Ako si vybrať najlacnejšie izby

[Kopírovať odkaz]
Zverejnené 5. 12. 2018 21:32:38 | | | |
Teraz sú k dispozícii dve tabuľky, room_type a room_info
Sú tu 3 hotely s preukazom 1~3. Každý hotel má potom 3 typy izieb, s ID 1~9.
room_type obsahuje meno, ID a zodpovedajúce ID hotela pre každý typ izby
V room_info je uložená cena každého dňa, každý typ izby a počet zostávajúcich izieb.
Témy, na ktoré by som sa chcel opýtať, sú:
Špecifikujte časový rozsah a počet izieb, ktoré sa majú rezervovať, dotazujte sa na hotely, výber typov izieb a ich priemerné ceny, ktoré spĺňajú podmienky (čas, počet zostávajúcich izieb), a zoradite ich podľa priemernej ceny od najnižšej po najvyššiu. Výsledky zahŕňajú hotely, vybrané kombinácie a množstvá izieb a najnižšiu priemernú cenu.
##不要求为同一房型, ale musí to byť ten istý hotel a môžete zmeniť typ izby uprostred.
##比如, čas registrácie je 2018-11-14~2018-11-15 a počet rezervovaných izieb je 5
##返回选择酒店A, 11-14 vyberte 4 typy izieb s ID 3, 1 typ izby s ID 2, 11-15 vyberte 3 typy izieb s ID 3, 2 typy izieb s ID 2 a najnižšia cena je 2000
##老师要求只能用sql语句, implementácia MySQL nemôže používať Python, C++ a podobne
Nepísal som to celý deň a nenašiel som podobnú tému na internete, tak som prišiel požiadať bohov o pomoc a chcem sa opýtať vás, ako to dosiahnuť, ďakujem~







Predchádzajúci:Sebahlásené zdieľanie skúseností PHP programového opice
Budúci:Postgraduálne prijímacie skúšky 2019 Politika Xu Tao a Xiao Xiurong Sprintové materiály
Zverejnené 6. 12. 2018 17:00:58 |
Tento príspevok naposledy upravovala Miaolinsen 6. 12. 2018 o 17:03

Nerobil som to s mysql, urobil som to s mssql:


/*
Špecifikujte časový rozsah a počet izieb, ktoré sa majú rezervovať, dotazujte sa na hotely, výber typov izieb a ich priemerné ceny, ktoré spĺňajú podmienky (čas, počet zostávajúcich izieb), a zoradite ich podľa priemernej ceny od najnižšej po najvyššiu. Výsledky zahŕňajú hotely, vybrané kombinácie a množstvá izieb a najnižšiu priemernú cenu.
##不要求为同一房型, ale musí to byť ten istý hotel a môžete zmeniť typ izby uprostred. -- Parsovanie: Znamená to, že nie je potrebné zvažovať typ miestnosti, zohľadňuje sa len počet miestností
##比如, vyberte čas registrácie 2018-11-14~2018-11-15 a počet rezervovaných izieb je 5 -- Analýza: Hotel musí byť v danom časovom rozmedzí a každý deň je dopyt po počte izieb (ak v určitý deň nikto nie je, nespĺňa štandard)
##返回选择酒店A, 11-14 vyberte 4 typy izieb s ID 3, 1 typ izby s ID 2, 11-15 vyberte 3 typy izieb s ID 3, 2 typy izieb s ID 2 a najnižšia cena je 2000 -- Analýza: Vypočítajte priemernú cenu podľa minimálnej konfigurácie na deň
##老师要求只能用sql语句, implementácia mysql, nemôže používať python, c++ a podobne. */


-- Prichádzajúce parametre, dátumový rozsah, počet potrebných miestností
DEKLARUJTE @sdate DÁTUM = '2018-11-14';
DEKLARUJTE @edate DÁTUM = '2018-11-15';
DEKLARUJTE @roomnum INT = 5;


-- Vypočítajte počet dní pobytu
DEKLARUJTE @days INT;
SET @days = DATEDIFF(DEŇ, @sdate, @edate)+1;

-- Číslo hotela, ktoré spĺňa časové rozpätie, počet izieb
AK EXISTS(select * from tempdb.dbo.sysobjects, kde id = object_id(N'tempdb.. ##temp_hotel') a typ='U')
ZAČIATOK
    drop table ##temp_hotel
KONIEC

VYBERTE ta.hotel_id do ##temp_hotel Z
(VYBERTE ri. [dátum], rt.hotel_id, SUM(ri.zostať) room_num Z room_info ri LEFT JOIN room_type rt na ri.room_id=rt.room_id kde @sdate <= [dátum] a [dátum] <= @edate SKUPINA PODĽA ri. [dátum],rt.hotel_id MÁ SUM(zostať) >= 5) ta
ZOSKUPENIE PODĽA ta.hotel_id MÁ COUNT(*) = @days



-- Vypočítané podľa hotela (nastavte minimálny typ izby na deň)

AK EXISTS(select * from tempdb.dbo.sysobjects, kde id = object_id(N'tempdb.. ##temp_result') a typ='U')
ZAČIATOK
    drop table ##temp_result
KONIEC
-- Predbežná tabuľka výsledkov Dátum izby v hoteli ID Typ izby Názov izby Počet izieb Cena izby Hotel Denný celkový počet Hotel Priemerná cena hotela Celková cena hotela Celková priemerná cena hotela Celková denná cena izby
VYTVORIŤ TABUĽKU ##temp_result(
    hotel_id INT,
    hotel_name varchar(255),
    [dátum] DÁTUM,
    room_id INT,
    room_name VARCHAR(255),
    room_num INT,
    Izba DESATINNÉ,
    dsumprice DESATINNÉ,
    DAGPRICE DESATINNÁ ČÍSLA,
    sumpric DECIMAL,
    sumavgpric DESATINNÉ
)

DEKLARUJTE @hid INT; -- Hotelový preukaz
DEKLARUJTE @infoid INT; -- informačné ID
--potvrdiť, že kurzor je kolekcia
DECLARE my_cursor kurzor pre (SELECT hotel_id z ##temp_hotel);
--Otvor kurzor--
Otvorte my_cursor
--Kurzorové premenné štartovacej slučky--
Prines ďalší z my_cursor do @hid
zatiaľ čo @@FETCH_STATUS = 0 -- vracia stav posledného kurzora vykonaného príkazom FETCH --
ZAČIATOK      
    -- Na základe hotelového ID sa účtuje opakujúci sa dátum
    AK EXISTS(select * from tempdb.dbo.sysobjects, kde id = object_id(N'tempdb.. ##temp_room') a typ='U')
    ZAČIATOK
        drop table ##temp_room
    KONIEC

    -- Hotely podľa dátumu, s izbami zoradenými podľa dátumu Sadzba
    VYBERTE info_id, [dátum], cena, zostať room_id DO ##temp_room Z dbo.room_info KDE @sdate <= [dátum] a [dátum] <= @edate A ZOSTAŇTE > 0 A room_id V (VYBERTE rt.room_id Z dbo.room_type rt, KDE rt.hotel_id=@hid) PORADIE PODĽA [dátum] ASC, cena ASC
   
   
    DECLARE @thisrdate DATE = NULL; -- Dátum
    DECLARE @thisrnum INT=0; -- Počet vybraných izieb k aktuálnemu dátumu
   
    DECLARE @rdate DATE = NULL; -- Dátum
    DEKLARUJTE @rmnum INT = 0; -- Počet izieb podľa typu izby
   
    -- Cyklus podľa dátumu
    DECLARE @my_cursor2 KURZOR;
    nastaviť @my_cursor2 = KURZOR PRE VÝBER info_id Z ##temp_room PORADIE PODĽA [dátum] ASC, cena ASC
    OTVORTE @my_cursor2;
    PRINES ĎALŠÍ Z @my_cursor2 DO @infoid
    WHILE(@@FETCH_STATUS=0)
    ZAČIATOK
        --##temp_result
        SELECT @rmnum=zostať, @rdate=[dátum] OD ##temp_room KDE info_id=@infoid
        AK (@thisrdate JE NULOVÝ ALEBO @thisrdate != @rdate)
        ZAČIATOK
            TLAČOVÁ @rdate
            SET @thisrdate = @rdate;
            SET @thisrnum = 0;
        KONIEC
        -- Typ miestnosti pre výber dávkovacieho formulára
        AK(@thisrnum <= @roomnum)
        ZAČIATOK
            IF (@thisrnum + @rmnum > @roomnum)
            ZAČIATOK
                -- Počet izieb, ktoré musíš použiť
                SET @rmnum = @roomnum-@thisrnum;
            KONIEC
        KONIEC
        ELSE   
        ZAČIATOK
            -- Na tento dátum nie je potrebná žiadna miestnosť
            NASTAVIŤ @rmnum = 0;
        KONIEC
        
        IF (@rmnum > 0)
        ZAČIATOK
            -- Pridať výsledky podľa špecifikovaného počtu
            VLOŽTE DO ##temp_result(hotel_id, hotel_name, [dátum], 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 izieb dosiahol vypočítanú priemernú cenu
            SET @thisrnum = @thisrnum + @rmnum;
            AK (@thisrnum = @roomnum)
            ZAČIATOK
                -- Celková cena podľa hotela, vypočítaná pre dátumy
                AKTUALIZÁCIA ##temp_result NASTAVIŤ dsumprice=(SELECT SUM(room_num*roomprice) Z ##temp_result TR, KDE tr.hotel_id=@hid A TR.[ dátum]=@thisrdate) KDE hotel_id=@hid A [dátum]=@thisrdate
                -- Vypočítajte priemernú cenu izby podľa hotela, celkovú cenu podľa dátumu
                AKTUALIZÁCIA ##temp_result NASTAVIŤ davgprice=(dsumprice/@roomnum) KDE hotel_id=@hid A [dátum]=@thisrdate
            KONIEC
        KONIEC

        PRINES ĎALEJ @my_cursor2 DO @infoid;
    KONIEC   
    blízke @my_cursor2;  --Vypni kurzor
    Deallocate @my_cursor2;   --uvoľniť kurzor

    -- Podľa hotela vypočítajte celkovú cenu hotela
    AKTUALIZÁCIA ##temp_result NASTAVIŤ sumpric=(SELECT SUM(room_num*roomprice) OD ##temp_result TR, KDE tr.hotel_id=@hid) KDE hotel_id=@hid
    -- Vypočítať priemernú dennú cenu celkovej izby v hoteli
    AKTUALIZÁCIA ##temp_result SET sumavgpric=(sumpric/@roomnum/@days) KDE hotel_id=@hid

    FETCH ďalej z my_cursor do @hid – choď na ďalší kurzor, žiadne mŕtve slučky
KONIEC  
Zatvor my_cursor -- Zatvor kurzor
Deallocate my_cursor - uvoľniť kurzor


-- Pridať názov hotela a typ izby na dočasný stôl
AKTUALIZÁCIA ##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)


-- Skontrolujte výsledky z tabuľky výsledkov
VYBERTE * Z ##temp_result




-- Dočasné tabuľky na konci čistenia
AK EXISTS(select * from tempdb.dbo.sysobjects, kde id = object_id(N'tempdb.. ##temp_hotel') a typ='U')
ZAČIATOK
    drop table ##temp_hotel
KONIEC
AK EXISTS(select * from tempdb.dbo.sysobjects, kde id = object_id(N'tempdb.. ##temp_room') a typ='U')
ZAČIATOK
    drop table ##temp_room
KONIEC
AK EXISTS(select * from tempdb.dbo.sysobjects, kde id = object_id(N'tempdb.. ##temp_result') a typ='U')
ZAČIATOK
    drop table ##temp_result
KONIEC

Skóre

Počet účastníkov1MB+1 prispieť+1 Kolaps dôvod
Admin + 1 + 1 Nadšený pomáhať druhým!

Zobraziť všetky hodnotenia

 Prenajímateľ| Zverejnené 6. 12. 2018 14:11:48 |
xzxmustwin Zverejnené 6.12.2018 o 11:58
Úprimne, štruktúra tejto tabuľky je trochu neprimeraná

Domáce úlohy, ktoré zadáva učiteľ databázy emmmm, môžu byť naozaj neprimerané a nevidel som to, ak som sa to nenaučil veľmi dobre...
Kľúčom sú však stále nápady na riešenie problémov, chcem sa opýtať priateľov, či máte nejaké návrhy?
 Prenajímateľ| Zverejnené 6. 12. 2018 14:09:20 |
lzzsf zverejnené 2018-12-6 09:07
MySQL je zastaraný, žiadny klient, dajte mi skript pre SQL Server

Prepáčte, SQL Sever som ešte nepoužil, možno preto, že je to len výučba, tak nás učiteľ požiadal, aby sme použili mysql. Ak sú tvoji priatelia ochotní podeliť sa o svoje nápady, veľmi pekne ďakujem.
Zverejnené 5. 12. 2018 21:57:13 |
Pôjdem do QQ skupiny ponúknuť odmenu 10 jüanov, aby som zistil, či vám niekto pomôže odpovedať nie
Zverejnené 6. 12. 2018 7:56:39 |
Pomoc
Zverejnené 6. 12. 2018 9:07:08 |
MySQL je zastaraný, žiadny klient, dajte mi skript pre SQL Server

Skóre

Počet účastníkov1MB+1 prispieť+1 Kolaps dôvod
Admin + 1 + 1 Nadšený!

Zobraziť všetky hodnotenia

Zverejnené 6. 12. 2018 11:24:25 |
lzzsf zverejnené 2018-12-6 09:07
MySQL je zastaraný, žiadny klient, dajte mi skript pre SQL Server

Odporúča sa o nápade hovoriť a nechať prenajímateľa, aby to použil ako referenciu, čo by malo byť možné
Zverejnené 6. 12. 2018 11:58:37 |
Úprimne, štruktúra tejto tabuľky je trochu neprimeraná

Skóre

Počet účastníkov1MB+1 prispieť+1 Kolaps dôvod
Admin + 1 + 1 Nadšený!

Zobraziť všetky hodnotenia

 Prenajímateľ| Zverejnené 6. 12. 2018 14:07:29 |
Publikované 5.12.2018 o 21:57
Pôjdem do QQ skupiny ponúknuť odmenu 10 jüanov, aby som zistil, či vám niekto pomôže odpovedať nie

Ďakujem, ak je niekto ochotný odpovedať, pošlem vám červenú obálku :)
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com