See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 23250|Vastuse: 11

[Uus number] Kuidas valida kõige odavamad n-toad

[Kopeeri link]
Postitatud 05.12.2018 21:32:38 | | | |
Nüüd on kaks tabelit, room_type ja room_info
Seal on 3 hotelli, mille ID-d on 1~3. Igal hotellil on 3 tubatüüpi, ID-d vastavalt 1~9.
room_type sisaldab iga toatüübi nime, ID-d ja vastavat hotelli ID-d
room_info on salvestatud iga päeva hind, iga toatüübi ja allesjäänud tubade arv.
Teemad, mida sooviksin küsida, on:
Määra broneeritavate ruumide ajavahemik ja arv, küsi hotellidest, toatüübi valikutest ja nende keskmistest hindadest, mis vastavad tingimustele (aeg, järelejäänud tubade arv), ning sorteeri need keskmise hinna järgi madalaimast kõrgeimani. Tulemused hõlmavad hotelle, valitud toakombinatsioone ja koguseid ning madalaimat keskmist hinda.
##不要求为同一房型, aga see peab olema sama hotell ja toa tüüp saab poole peal vahetada.
##比如, sisseregistreerimise aeg on 2018-11-14~2018-11-15 ning broneeritud tubade arv on 5
##返回选择酒店A, 11-14 vali 4 toatüüpi ID 3-ga, 1 toatüüp ID 2-ga, 11-15 vali 3 toatüüpi ID 3-ga, 2 toatüüpi ID 2-ga ja madalaim hind on 2000
##老师要求只能用sql语句, MySQL rakendus ei saa kasutada Pythonit, C++ jne
Ma ei kirjutanud seda ühe päeva jooksul ja ma ei näinud internetis sarnast teemat, nii et tulin jumalatelt abi paluma ja tahan küsida, kuidas seda saavutada, aitäh~







Eelmine:PHP programmi ape ise kirjeldatud kogemuste jagamine
Järgmine:2019. aasta magistriõppe sisseastumiseksami poliitika Xu Tao ja Xiao Xiurongi sprindimaterjalid
Postitatud 06.12.2018 17:00:58 |
Seda postitust toimetas viimati Miaolinsen 2018-12-6 kell 17:03

Ma ei teinud seda mysql-iga, vaid mssql-iga:


/*
Määra broneeritavate ruumide ajavahemik ja arv, küsi hotellidest, toatüübi valikutest ja nende keskmistest hindadest, mis vastavad tingimustele (aeg, järelejäänud tubade arv), ning sorteeri need keskmise hinna järgi madalaimast kõrgeimani. Tulemused hõlmavad hotelle, valitud toakombinatsioone ja koguseid ning madalaimat keskmist hinda.
##不要求为同一房型, aga see peab olema sama hotell ja toa tüüp saab poole peal vahetada. -- Tõlgendamine: See tähendab, et ruumitüübi pole vaja arvestada, arvestatakse ainult ruumide arvu
##比如, vali registreerimisaeg 2018-11-14~2018-11-15, ja broneeritud tubade arv on 5 – Analüüs: Hotell peab olema kuupäevavahemikus ning iga päev on nõudlus tubade arvu järele (kui kindlal päeval kedagi pole, ei vasta see standardile)
##返回选择酒店A, 11-14 vali 4 toatüüpi ID 3-ga, 1 toatüüp ID 2-ga, 11-15 vali 3 toatüüpi ID 3-ga, 2 toatüüpi ID 2-ga ja madalaim hind on 2000 -- Analüüs: arvuta keskmine hind vastavalt minimaalsele konfiguratsioonile päevas
##老师要求只能用sql语句, MySQL rakendus, ei saa kasutada Pythonit, C++ jne. */


-- Saabuvad parameetrid, kuupäevavahemik, vajalike tubade arv
DEKLAREERI @sdate KUUPÄEV = '2018-11-14';
DEKLAREERI @edate KUUPÄEV = '2018-11-15';
DEKLAREERI @roomnum INT = 5;


-- Arvuta viibimispäevade arv
DEKLAREERI @days INT;
KOMPLEKT @days = DATEDIFF(PÄEV, @sdate, @edate)+1;

-- Hotelli number, mis vastab kuupäevavahemikule, tubade arv
IF EKSISTEERIB(vali * tempdb.dbo.sysobjects hulgast, kus id = object_id(N'tempdb.. ##temp_hotel') ja type='U')
ALUSTA
    Langeta laud ##temp_hotel
LÕPP

VALI ta.hotel_id ##temp_hotel VALIKUST
(VALI ri. [date], rt.hotel_id, SUM(ri.remain) room_num room_info ri VASAKULT ÜHINEVAD room_type rt ri.room_id=rt.room_id KUS @sdate <= [date] ja [date] <= @edate GRUPP RI JÄRGI. [date],rt.hotel_id HAVING SUM(REMAIN) >= 5) ta
GRUPEERI ta.hotel_id ARVU(*) = @days



-- Arvutatud vastavalt hotellile (seadista miinimumtoatüüp päevas)

IF EKSISTEERIB(vali * tempdb.dbo.sysobjects hulgast, kus id = object_id(N'tempdb.. ##temp_result') ja type='U')
ALUSTA
    Drop table ##temp_result
LÕPP
-- Esialgne tulemuste tabel Hotelli kuupäev Toa tüüp ID Toa tüüp Nimi Tubade arv Toa hind Hotell Päev Kokku hotell Iga päev Keskmine hotelli hind Hotell Kogu hotelli hind Hotell Kokku Päevane Keskmine Hotelli Keskmine Hind Kokku Päevane Toa Hind
LOO TABEL ##temp_result(
    hotel_id INT,
    hotel_name Varchar(255),
    [kuupäev] DATE,
    room_id INT,
    room_name VARCHAR(255),
    room_num INT,
    toa hind KÜMNENDKOHTA,
    dsumprice DECIMAL,
    davgprice DECIMAL,
    sumpric DECIMAL,
    sumavgpric DECIMAL
)

DEKLAREERIDA @hid INT; -- Hotelli ID
DEKLAREERI @infoid INT; -- info ID
--kinnitada, et kursor on kogumik
DECLARE my_cursor kursor (SELECT hotel_id ##temp_hotel-st);
--Ava kursor--
Ava my_cursor
--Käivitustsükli kursori muutujad--
Too järgmine my_cursor @hid
samal ajal kui @@FETCH_STATUS = 0 -- tagastab viimase FETCH lausega täidetud kursori oleku --
ALUSTA      
    -- Hotelli ID põhjal on korduv kuupäev hinnastatud
    IF EKSISTEERIB(vali * tempdb.dbo.sysobjects hulgast, kus id = object_id(N'tempdb.. ##temp_room') ja type='U')
    ALUSTA
        Langeta laud ##temp_room
    LÕPP

    -- Hotellid kuupäeva järgi, toad kuupäeva järgi Hind
    VALI info_id, [kuupäev], hind, jää, room_id VALI ##temp_room SEALT dbo.room_info KUS @sdate <= [kuupäev] ja [kuupäev] <= @edate JA jää > 0 JA room_id SISSE (VALI rt.room_id dbo.room_type rt KUS rt.hotel_id=@hid) ORDER BY [kuupäev] ASC, hind ASC
   
   
    DEKLAREERI @thisrdate KUUPÄEV = NULL; -- Kuupäev
    DEKLAREERI @thisrnum INT=0; -- Valitud tubade arv praegusel kuupäeval
   
    DEKLAREERI @rdate KUUPÄEV = NULL; -- Kuupäev
    DEKLAREERI @rmnum INT = 0; -- Ruumide arv ruumitüübi järgi
   
    -- Tsükkel kuupäeva järgi
    DEKLAREERI @my_cursor2 KURSOR;
    Sea @my_cursor2 = KURSOR SELECT info_id HULGAST ##temp_room TELLI JÄRGI [kuupäev] ASC, hind ASC
    AVA @my_cursor2;
    TOO JÄRGMINE @my_cursor2 SISSE @infoid
    WHILE(@@FETCH_STATUS=0)
    ALUSTA
        --##temp_result
        VALI @rmnum=jäämine, @rdate=[kuupäev] ALATES ##temp_room KUS info_id=@infoid
        KUI (@thisrdate ON NULL VÕI @thisrdate != @rdate)
        ALUSTA
            TRÜKI @rdate
            SET @thisrdate = @rdate;
            KOMPLEKT @thisrnum = 0;
        LÕPP
        -- Annusvormi valikuruumi tüüp
        IF(@thisrnum <= @roomnum)
        ALUSTA
            IF (@thisrnum + @rmnum > @roomnum)
            ALUSTA
                -- Ruumide arv, mida pead kasutama
                KOMPLEKT @rmnum = @roomnum-@thisrnum;
            LÕPP
        LÕPP
        OTHER   
        ALUSTA
            -- Selleks kuupäevaks ruumi pole vaja
            KOMPLEKT @rmnum = 0;
        LÕPP
        
        IF (@rmnum > 0)
        ALUSTA
            -- Lisa tulemused määratud arvuga
            SISESTA ##temp_result(hotel_id, hotel_name, [kuupäev], room_id, room_name, room_num, toahind, dsumprice, davgprice, sumpric, sumavgpric)
            VALI @hid, '', @thisrdate, room_id, '', @rmnum, hind, 0, 0, 0, 0 ###temp_room KUS info_id = @infoid
            
            -- Tubade arv on jõudnud arvutatud keskmise hinnani
            SET @thisrnum = @thisrnum + @rmnum;
            IF (@thisrnum = @roomnum)
            ALUSTA
                -- Koguhind hotellide kaupa, arvutatud kuupäevade kaupa
                UUENDUS ##temp_result SEA dsumprice=(SELECT SUM(room_num*toahind) ALATES ##temp_result TR, KUS tr.hotel_id=@hid JA TR.[ date]=@thisrdate) KUS hotel_id=@hid JA [kuupäev]=@thisrdate
                -- Arvuta keskmine toahind hotellide kaupa, koguhind kuupäeva järgi
                UUENDUS ##temp_result MÄÄRA davgprice=(dsumprice/@roomnum) KUS hotel_id=@hid JA [kuupäev]=@thisrdate
            LÕPP
        LÕPP

        TOO JÄRGMINE @my_cursor2 SISSE @infoid;
    LÕPP   
    lähedal @my_cursor2;  --Lülita kursor välja
    Deallocate @my_cursor2;   --vabasta kursor

    -- Hotelli järgi arvuta kogu hotelli hind
    UUENDUS ##temp_result SEA SUMPRIC=(SELECT SUM(room_num*toahind) ALATES ##temp_result TR KUS tr.hotel_id=@hid) KUS hotel_id=@hid
    -- Arvuta hotelli toa keskmine päevahind
    UUENDUS ##temp_result SEADISTA sumavgpric=(sumpric/@roomnum/@days) KUS hotel_id=@hid

    TOO järgmine my_cursor @hid - mine järgmise kursori juurde, ilma surnud loopideta
LÕPP  
sulge my_cursor -- sulge kursor
Vabasta my_cursor - vabasta kursor


-- Lisa hotelli nimi ja toa tüübi nimi ajutisele tabelile
UUENDUS ##temp_result SEADISTA hotel_name=(VALI ht.hotel_name dbo.hotel HT KUS ht.hotel_id=##temp_result.hotel_id),
room_name=(VALI rt.room_name dbo.room_type RT-rt.room_id=##temp_result.room_id)


-- Kontrolli tulemusi tulemuste tabelist
VALI * ##temp_result




-- Ajutiste tabelite lõpetamine
IF EKSISTEERIB(vali * tempdb.dbo.sysobjects hulgast, kus id = object_id(N'tempdb.. ##temp_hotel') ja type='U')
ALUSTA
    Langeta laud ##temp_hotel
LÕPP
IF EKSISTEERIB(vali * tempdb.dbo.sysobjects hulgast, kus id = object_id(N'tempdb.. ##temp_room') ja type='U')
ALUSTA
    Langeta laud ##temp_room
LÕPP
IF EKSISTEERIB(vali * tempdb.dbo.sysobjects hulgast, kus id = object_id(N'tempdb.. ##temp_result') ja type='U')
ALUSTA
    Drop table ##temp_result
LÕPP

Skoor

Osalejate arv1MB+1 Aitavad kaasa+1 Ahenda põhjus
Admin + 1 + 1 Olen entusiastlik teiste aitamise suhtes!

Vaata kõiki hinnanguid

 Üürileandja| Postitatud 06.12.2018 14:11:48 |
xzxmustwin Postitatud 2018-12-6 11:58
Ausalt öeldes on selle tabeli struktuur veidi ebamõistlik

Emmmm andmebaasi õpetaja antud kodutööde küsimused võivad tõesti olla ebamõistlikud ja ma ei näinud seda, kui ma seda hästi ei õppinud...
Kuid võtmeküsimus on endiselt probleemilahenduse ideed, tahaksin sõpradelt küsida, kas teil on mingeid soovitusi?
 Üürileandja| Postitatud 06.12.2018 14:09:20 |
lzzsf postitatud 2018-12-6 09:07
MySQL on aegunud, pole klienti, anna mulle SQL serveri skript

Vabandust, ma pole veel SQL Severit kasutanud, võib-olla sellepärast, et see on lihtsalt õpetamine, nii et õpetaja palus meil kasutada mySQL-i selleks. Kui su sõbrad on valmis oma ideid jagama, suur tänu.
Postitatud 05.12.2018 21:57:13 |
Lähen QQ gruppi ja pakun 10 jüaani suurust preemiat, et näha, kas keegi oskab aidata vastata ei
Postitatud 06.12.2018 07:56:39 |
Abi
Postitatud 06.12.2018 09:07:08 |
MySQL on aegunud, pole klienti, anna mulle SQL serveri skript

Skoor

Osalejate arv1MB+1 Aitavad kaasa+1 Ahenda põhjus
Admin + 1 + 1 Entusiastlik!

Vaata kõiki hinnanguid

Postitatud 06.12.2018 11:24:25 |
lzzsf postitatud 2018-12-6 09:07
MySQL on aegunud, pole klienti, anna mulle SQL serveri skript

Soovitatav on arutada ideed ja lasta üürileandjal seda kasutada soovitusena, mis peaks samuti olema võimalik
Postitatud 06.12.2018 11:58:37 |
Ausalt öeldes on selle tabeli struktuur veidi ebamõistlik

Skoor

Osalejate arv1MB+1 Aitavad kaasa+1 Ahenda põhjus
Admin + 1 + 1 Entusiastlik!

Vaata kõiki hinnanguid

 Üürileandja| Postitatud 06.12.2018 14:07:29 |
Avaldatud 2018-12-5 21:57
Lähen QQ gruppi ja pakun 10 jüaani suurust preemiat, et näha, kas keegi oskab aidata vastata ei

Aitäh, kui keegi on nõus vastama, saadan sulle punase ümbriku :)
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com