Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 23250|Odgovoriti: 11

[Nova številka] Kako izbrati najcenejše n sob

[Kopiraj povezavo]
Objavljeno na 5. 12. 2018 21:32:38 | | | |
Zdaj sta na voljo dve mizi, room_type in room_info
So trije hoteli z osebno izkaznico 1~3. Vsak hotel ima nato 3 vrste sob, z ID-ji 1~9.
room_type vsebuje ime, ID in ustrezno hotelsko ID za vsako vrsto sobe
V room_info je shranjena cena vsakega dneva, vsaka vrsta sobe in število preostalih sob.
Teme, ki bi jih rad zastavil, so:
Določite časovno obdobje in število sob, ki jih je treba rezervirati, poizvedite po hotelih, izbranih vrstah sob in njihovih povprečnih cenah, ki izpolnjujejo pogoje (čas, število preostalih sob), ter jih razvrstite po povprečni ceni od najnižje do najvišje. Rezultati vključujejo hotele, izbrane kombinacije in količine sob ter najnižjo povprečno ceno.
##不要求为同一房型, ampak mora biti isti hotel, in lahko spremeniš vrsto sobe sredi poti.
##比如, čas prijave je 2018-11-14~2018-11-15, število rezerviranih sob pa je 5
##返回选择酒店A, 11-14 izberite 4 vrste sob z ID 3, 1 tip sobe z ID 2, 11-15 izberite 3 vrste sob z ID 3, 2 vrste sob z ID 2, najnižja cena pa je 2000
##老师要求只能用sql语句, implementacija MySQL ne more uporabljati Pythona, C++ itd
Nisem ga napisal en dan, in na internetu nisem videl podobne teme, zato sem prišel prosit bogove za pomoč in želim vprašati vas, kako to doseči, hvala~







Prejšnji:PHP program opice o samoporočanju o deljenju izkušenj
Naslednji:Podiplomski sprejemni izpit 2019 Politika Xu Tao in Xiao Xiurong Sprint gradiva
Objavljeno na 6. 12. 2018 17:00:58 |
Ta objava je bila nazadnje urejena s strani Miaolinsen 6. 12. 2018 ob 17:03

Jaz tega nisem naredil z mysql, ampak z mssql:


/*
Določite časovno obdobje in število sob, ki jih je treba rezervirati, poizvedite po hotelih, izbranih vrstah sob in njihovih povprečnih cenah, ki izpolnjujejo pogoje (čas, število preostalih sob), ter jih razvrstite po povprečni ceni od najnižje do najvišje. Rezultati vključujejo hotele, izbrane kombinacije in količine sob ter najnižjo povprečno ceno.
##不要求为同一房型, ampak mora biti isti hotel, in lahko spremeniš vrsto sobe sredi poti. -- Razčlenjevanje: Pomeni, da ni treba upoštevati vrste sobe, upošteva se le število sob
##比如, izberite čas prijave 2018-11-14~2018-11-15, število rezerviranih sob pa je 5 -- Analiza: Hotel mora biti v časovnem obdobju, vsak dan pa obstaja povpraševanje po številu sob (če na določen dan ni nikogar, ne bo ustrezal standardu)
##返回选择酒店A, 11-14 izberite 4 vrste sob z ID 3, 1 tip sobe z ID 2, 11-15 izberite 3 vrste sob z ID 3, 2 vrste sob z ID 2, najnižja cena pa je 2000 -- Analiza: Izračunajte povprečno ceno glede na minimalno dnevno konfiguracijo
##老师要求只能用sql语句, implementacija mysql, ne more uporabljati pythona, c++ itd. */


-- Vhodni parametri, časovno obdobje, število potrebnih sob
DATUM @sdate DECLARE = '2018-11-14';
RAZGLASITE @edate DATUM = '2018-11-15';
RAZGLASITE @roomnum INT = 5;


-- Izračunajte število dni bivanja
DEKLARIRAJ @days INT;
NASTAVI @days = DATEDIFF(DAN, @sdate, @edate)+1;

-- Številka hotela, ki ustreza datumskemu obdobju, število sob
ČE OBSTAJA(izberi * iz tempdb.dbo.sysobjects kjer id = object_id(N'tempdb.. ##temp_hotel') in tip='U')
ZAČETEK
    Spusti mizo ##temp_hotel
KONEC

IZBERI ta.hotel_id v ##temp_hotel OD
(IZBERI ri. [datum], rt.hotel_id, SUM(ri.ostani) room_num IZ room_info ri LEVO ZDRUŽI SE room_type rt na ri.room_id=rt.room_id kjer @sdate <= [datum] in [datum] <= @edate SKUPINA PO ri. [datum],rt.hotel_id IMA SUM(REMAIN) >= 5) ta
SKUPINA Z ta.hotel_id IMA COUNT(*) = @days



-- Izračunano glede na hotel (konfigurirajte minimalno vrsto sobe na dan)

ČE OBSTAJA(izberi * iz tempdb.dbo.sysobjects kjer id = object_id(N'tempdb.. ##temp_result') in tip='U')
ZAČETEK
    Drop miza ##temp_result
KONEC
-- Začasna tabela rezultatov Hotel Datum Vrsta sobe ID Vrsta sobe Ime sobe Število sob Cena sobe Hotel Dnevno Skupno Dnevno Povprečna cena hotela Hotel Skupna cena hotela Skupna dnevna povprečna cena hotela Skupna dnevna cena sobe
USTVARI TABELO ##temp_result(
    hotel_id INT,
    hotel_name varchar(255),
    [datum] DATUM,
    room_id INT,
    room_name VARCHAR(255),
    room_num INT,
    roomprice DECIMAL,
    dsumprice DECIMAL,
    DAVGPRICE DECIMAL,
    sumpric DECIMAL,
    sumavgpric DECIMAL
)

DEKLARIRAJ @hid INT; -- Hotelska izkaznica
DEKLARIRAJ @infoid INT; -- informacijski ID
--potrdi, da je kazalec zbirka
DECLARE my_cursor kazalec za (SELECT hotel_id iz ##temp_hotel);
--Odpri kazalec--
Odpri my_cursor
--Spremenljivke začetnega kazalca zanke--
prinesi naslednje iz my_cursor v @hid
medtem ko @@FETCH_STATUS = 0 -- vrne stanje zadnjega kazaleca, ki ga izvede stavek FETCH --
ZAČETEK      
    -- Glede na hotelsko izkaznico se ponavljajoči datum določa
    ČE OBSTAJA(izberi * iz tempdb.dbo.sysobjects kjer id = object_id(N'tempdb.. ##temp_room') in tip='U')
    ZAČETEK
        miza za spuščanje ##temp_room
    KONEC

    -- Hoteli, po datumu, s sobami razvrščenimi po datumu Cena
    IZBERI info_id, [datum], cena, ostani, room_id V ##temp_room IZ dbo.room_info, KJER @sdate <= [datum] in [datum] <= @edate TER OSTANI > 0 IN room_id V (IZBERI rt.room_id IZ dbo.room_type rt, KJER rt.hotel_id=@hid) VRSTNI RED PO [DATUM] ASC, CENA ASC
   
   
    DECLARE @thisrdate DATUM = NULL; -- Datum
    DECLARE @thisrnum INT=0; -- Število izbranih sob na trenutni datum
   
    DECLARE @rdate DATE = NULL; -- Datum
    DECLARE @rmnum INT = 0; -- Število sob glede na vrsto sobe
   
    -- Cikli po datumih
    OZNAČI @my_cursor2 KAZALEC;
    nastavi @my_cursor2 = KAZALEC ZA IZBIRO info_id IZ ##temp_room VRSTNI RED PO [DATUM] ASC, CENA ASC
    ODPRI @my_cursor2;
    PRINESI NASLEDNJE OD @my_cursor2 V @infoid
    WHILE(@@FETCH_STATUS=0)
    ZAČETEK
        --##temp_result
        SELECT @rmnum=ostani, @rdate=[datum] OD ##temp_room KJER info_id=@infoid
        ČE JE (@thisrdate NIČELNA ALI @thisrdate != @rdate)
        ZAČETEK
            PRINT @rdate
            SET @thisrdate = @rdate;
            NASTAVI @thisrnum = 0;
        KONEC
        -- Vrsta sobe za izbiro oblike odmerka
        ČE(@thisrnum <= @roomnum)
        ZAČETEK
            IF (@thisrnum + @rmnum > @roomnum)
            ZAČETEK
                -- Število sob, ki jih morate uporabiti
                SET @rmnum = @roomnum-@thisrnum;
            KONEC
        KONEC
        ELSE   
        ZAČETEK
            -- Za ta datum ni potreben prostor
            NASTAVI @rmnum = 0;
        KONEC
        
        ČE (@rmnum > 0)
        ZAČETEK
            -- Dodajte rezultate po določenem številu
            VSTAVI V ##temp_result(hotel_id, hotel_name, [datum], room_id, room_name, room_num, roomprice, dsumprice, davgprice, sumpric, sumavgpric)
            IZBERI @hid, '', @thisrdate, room_id, '', @rmnum, cena, 0, 0, 0, 0 OD ##temp_room KJER info_id = @infoid
            
            -- Število sob je doseglo izračunano povprečno ceno
            SET @thisrnum = @thisrnum + @rmnum;
            ČE (@thisrnum = @roomnum)
            ZAČETEK
                -- Skupna cena po hotelih, izračunana za datume
                POSODOBITEV ##temp_result NASTAVI dsumprice=(SELECT SUM(room_num*roomprice) IZ ##temp_result TR, KJER tr.hotel_id=@hid IN TR.[ datum]=@thisrdate), KJER hotel_id=@hid IN [datum]=@thisrdate
                -- Izračunajte povprečno ceno sobe po hotelih, skupno ceno po datumu
                POSODOBITEV ##temp_result NASTAVI davgprice=(dsumprice/@roomnum), KJER hotel_id=@hid IN [datum]=@thisrdate
            KONEC
        KONEC

        PRINESI NASLEDNJE IZ @my_cursor2 V @infoid;
    KONEC   
    tesno @my_cursor2;  --Izklopi kazalec
    Deallocate @my_cursor2;   --sprostitveni kazalec

    -- Po hotelih izračunamo skupno ceno hotela
    POSODOBITEV ##temp_result NASTAVI SUMPRIC=(SELECT SUM(room_num*roomprice) OD ##temp_result TR, KJER tr.hotel_id=@hid) KJER hotel_id=@hid
    -- Izračunajte povprečno dnevno ceno celotne sobe v hotelu
    POSODOBITEV ##temp_result SET sumavgpric=(sumpric/@roomnum/@days) KJER hotel_id=@hid

    PRINESI NEXT iz my_cursor v @hid - pojdi na naslednji kazalec, brez mrtvih zank
KONEC  
Zapri my_cursor -- zapri kazalec
Deallocate my_cursor - sprosti kazalec


-- Dodajte ime hotela in tip sobe na začasno mizo
POSODOBITEV ##temp_result NASTAVI hotel_name=(IZBERI ht.hotel_name IZ dbo.hotel HT, KJER ht.hotel_id=###temp_result.hotel_id),
room_name=(IZBERI rt.room_name IZ dbo.room_type rt, KJER rt.room_id=##temp_result.room_id)


-- Preverite rezultate iz tabele rezultatov
IZBERI * IZ ##temp_result




-- Končno čiščenje začasnih tabel
ČE OBSTAJA(izberi * iz tempdb.dbo.sysobjects kjer id = object_id(N'tempdb.. ##temp_hotel') in tip='U')
ZAČETEK
    Spusti mizo ##temp_hotel
KONEC
ČE OBSTAJA(izberi * iz tempdb.dbo.sysobjects kjer id = object_id(N'tempdb.. ##temp_room') in tip='U')
ZAČETEK
    miza za spuščanje ##temp_room
KONEC
ČE OBSTAJA(izberi * iz tempdb.dbo.sysobjects kjer id = object_id(N'tempdb.. ##temp_result') in tip='U')
ZAČETEK
    Drop miza ##temp_result
KONEC

Partitura

Število udeležencev1MB+1 prispevati+1 Propad razlog
Admin + 1 + 1 Navdušeni nad pomočjo drugim!

Oglejte si vse ocene

 Najemodajalec| Objavljeno na 6. 12. 2018 14:11:48 |
xzxmustwin Objavljeno 6. 12. 2018 ob 11:58
Iskreno povedano, struktura te tabele je nekoliko nerazumna

Vprašanja za domače naloge, ki jih je določil učitelj emmmm baze podatkov, so morda res nerazumna, in jih ne bi videl, če se jih nisem dobro naučil...
Kljub temu so ključ še vedno ideje za reševanje problemov, rad bi vprašal prijatelje, če imate kakšen predlog?
 Najemodajalec| Objavljeno na 6. 12. 2018 14:09:20 |
lzzsf objavljeno 6. 12. 2018 09:07
MySQL je zastarel, ni odjemalca, daj mi skripto za SQL Server

Opravičujem se, še nisem uporabljal SQL Serverja, morda zato, ker je to samo poučevanje, zato nas je učitelj prosil, naj uporabimo mysql za to. Če so vaši prijatelji pripravljeni deliti svoje ideje, najlepša hvala.
Objavljeno na 5. 12. 2018 21:57:13 |
Pojdem v QQ skupino in ponudim nagrado 10 juanov, da vidim, če ti kdo lahko pomaga odgovoriti ne
Objavljeno na 6. 12. 2018 07:56:39 |
Pomoč
Objavljeno na 6. 12. 2018 09:07:08 |
MySQL je zastarel, ni odjemalca, daj mi skripto za SQL Server

Partitura

Število udeležencev1MB+1 prispevati+1 Propad razlog
Admin + 1 + 1 Navdušeno!

Oglejte si vse ocene

Objavljeno na 6. 12. 2018 11:24:25 |
lzzsf objavljeno 6. 12. 2018 09:07
MySQL je zastarel, ni odjemalca, daj mi skripto za SQL Server

Priporočljivo je, da se o ideji pogovorite in dovolite, da najemodajalec to uporabi kot referenco, kar bi moralo biti prav tako mogoče
Objavljeno na 6. 12. 2018 11:58:37 |
Iskreno povedano, struktura te tabele je nekoliko nerazumna

Partitura

Število udeležencev1MB+1 prispevati+1 Propad razlog
Admin + 1 + 1 Navdušeno!

Oglejte si vse ocene

 Najemodajalec| Objavljeno na 6. 12. 2018 14:07:29 |
Objavljeno 5. 12. 2018 ob 21:57
Pojdem v QQ skupino in ponudim nagrado 10 juanov, da vidim, če ti kdo lahko pomaga odgovoriti ne

Hvala, če je kdo pripravljen odgovoriti, vam pošljem rdečo kuverto :)
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com