Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 23250|Vastaus: 11

[Uusi numero] Kuinka valita halvimmat n-huoneet

[Kopioi linkki]
Julkaistu 5.12.2018 21.32.38 | | | |
Nyt käytössä on kaksi taulukkoa, room_type ja room_info
Hotellissa on kolme henkilöllisyystodistusta 1~3. Sitten jokaisessa hotellissa on kolme huonetyyppiä, joiden tunnukset ovat 1~9.
room_type sisältää kunkin huonetyypin nimen, ID:n ja vastaavan hotellin tunnuksen
room_info säilytetään kunkin päivän hinta, huonetyyppi ja jäljellä olevien huoneiden määrä.
Aiheet, joita haluaisin kysyä, ovat:
Määrittele aikaväli ja varattavien huoneiden määrä, kysy hotelleista, huonetyypeistä ja niiden keskimääräisistä hinnoista, jotka täyttävät ehdot (aika, jäljellä olevien huoneiden määrä), ja lajittele ne keskimääräisen hinnan mukaan alimmasta korkeimpaan. Tulokset sisältävät hotellit, valitut huoneyhdistelmät ja määrät sekä alhaisimman keskihinnan.
##不要求为同一房型, mutta sen täytyy olla sama hotelli, ja huonetyyppiä voi vaihtaa kesken ajan.
##比如, sisäänkirjautumisaika on 2018-11-14~2018-11-15, ja varattujen huoneiden määrä on 5
##返回选择酒店A, 11-14 valitse 4 huonetyyppiä ID 3:lla, 1 huonetyyppi ID 2:lla, 11-15 valitse 3 huonetyyppiä ID 3:lla, 2 huonetyyppiä ID 2:lla, ja halvin hinta on 2000
##老师要求只能用sql语句, MySQL-toteutus ei voi käyttää Pythonia, C++:a jne
En kirjoittanut sitä päivään, enkä nähnyt samanlaista aihetta netissä, joten tulin pyytämään jumalilta apua, ja haluan kysyä sinulta, miten sen voi saavuttaa, kiitos~







Edellinen:PHP-ohjelman apen itse raportoitu kokemusten jakaminen
Seuraava:Vuoden 2019 jatko-opintojen pääsykokeiden politiikka Xu Taon ja Xiao Xiurongin sprinttimateriaalit
Julkaistu 6.12.2018 17.00.58 |
Tätä julkaisua muokasi viimeksi Miaolinsen 6.12.2018 klo 17:03

En tehnyt sitä mysql:llä, vaan mssql:llä:


/*
Määrittele aikaväli ja varattavien huoneiden määrä, kysy hotelleista, huonetyypeistä ja niiden keskimääräisistä hinnoista, jotka täyttävät ehdot (aika, jäljellä olevien huoneiden määrä), ja lajittele ne keskimääräisen hinnan mukaan alimmasta korkeimpaan. Tulokset sisältävät hotellit, valitut huoneyhdistelmät ja määrät sekä alhaisimman keskihinnan.
##不要求为同一房型, mutta sen täytyy olla sama hotelli, ja huonetyyppiä voi vaihtaa kesken ajan. -- Jäsentäminen: Se tarkoittaa, ettei huonetyyppiä tarvitse ottaa huomioon, vaan ainoastaan huoneiden määrä otetaan huomioon
##比如, valitse sisäänkirjautumisaika 2018-11-14~2018-11-15, ja varattujen huoneiden määrä on 5 -- Analyysi: Hotellin tulee olla päivämääräalueella, ja huoneiden määrälle on kysyntää joka päivä (jos tiettynä päivänä ei ole ketään, se ei täytä vaatimuksia)
##返回选择酒店A, 11-14 valitse 4 huonetyyppiä tunnuksella 3, 1 huonetyyppi tunnuksella 2, 11-15 valitse 3 huonetyyppiä tunnuksella 3, 2 huonetyyppiä tunnuksella 2, ja alhaisin hinta on 2000 -- Analyysi: Laske keskimääräinen hinta minimikokoonpanon mukaan päivässä
##老师要求只能用sql语句, mySQL-toteutus, en voi käyttää pythonia, C++:a jne. */


-- Saapuvat parametrit, aikaväli, tarvittavien huoneiden määrä
DECARE @sdate DATE = '2018-11-14';
DECARE @edate DATE = '2018-11-15';
DEKLARE @roomnum INT = 5;


-- Laske oleskelupäivien määrä
DECARE @days INT;
JOUKKO @days = DATEDIFF(PÄIVÄ, @sdate, @edate)+1;

-- Hotellin numero, joka täyttää päivämääräjään, huoneiden määrä
JOS ON olemassa (valitse * joukosta tempdb.dbo.sysobjects, missä id = object_id(N'tempdb.. ##temp_hotel') ja type='U')
ALOITA
    Pudota pöytä ##temp_hotel
LOPPU

VALITSE ta.hotel_id ##temp_hotel KOHDASTA
(VALITSE ri. [date], rt.hotel_id, SUM(ri.remain) room_num room_info RI VASEMMALLE LIITTYY room_type rt ri.room_id=rt.room_id missä @sdate <= [date] ja [date] <= @edate RYHMÄ ri:n mukaan. [date],rt.hotel_id HAVING SUM(REMAIN) >= 5) ta
RYHMITTELE ta.hotel_id COUNT(*) = @days



-- Laskettu hotellin mukaan (määritä minimihuonetyyppi päivässä)

JOS ON olemassa (valitse * joukosta tempdb.dbo.sysobjects, missä id = object_id(N'tempdb.. ##temp_result') ja type='U')
ALOITA
    Pudota pöytä ##temp_result
LOPPU
-- Alustava tulostaulukko Hotelli Päivämäärä Huone Tyyppi ID Huoneen tyyppi Nimi Huoneiden määrä Huoneen hinta Hotelli Päivittäin Yhteensä Hotelli Päivittäinen Keskimääräinen Hotellin hinta Hotelli Kokonaishinta Hotellin Kokonaishinta Hotellin Kokonaismäärä Päivittäinen Huoneen Hinta Yhteensä Päivittäinen Huoneen Hinta
LUO TAULU ##temp_result(
    hotel_id INT,
    hotel_name Varchar (255),
    [päivämäärä] PÄIVÄMÄÄRÄ,
    room_id INT,
    room_name VARCHAR(255),
    room_num INT,
    huoneen hinta DESIMAALI,
    dsumprice DESIMAALI,
    davgprice DESIMAALI,
    sumpric DECIMAL,
    sumavgpric DECIMAL
)

DECARE @hid INT; -- Hotellin henkilöllisyystodistus
DECARE @infoid INT; -- info ID
--vahvistaa, että kursori on kokoelma
DECLARE my_cursor kursori (SELECT hotel_id ##temp_hotel);
--Avaa kursori--
Avaa my_cursor
--Aloitussilmukan kursorimuuttujat--
nouda seuraavaksi my_cursor:sta @hid
kun taas @@FETCH_STATUS = 0 -- palauttaa viimeisen FETCH-lauseen suorittaman kursorin tilan --
ALOITA      
    -- Hotellin ID:n perusteella toistuva päivämäärä on hinnoiteltu
    JOS ON olemassa (valitse * joukosta tempdb.dbo.sysobjects, missä id = object_id(N'tempdb.. ##temp_room') ja type='U')
    ALOITA
        Pudota pöytä ##temp_room
    LOPPU

    -- Hotellit päivämäärän mukaan, huoneet järjestetty päivämäärän mukaan Hinta
    VALITSE info_id, [date], price, remain, room_id MUOTOON ##temp_room SIELTÄ dbo.room_info MISSÄ @sdate <= [date] ja [date] <= @edate JA pysy > 0 JA room_id IN (VALITSE rt.room_id JOUKOSTA dbo.room_type rt MISSÄ rt.hotel_id=@hid) TILAA [päivämäärä] ASC, hinta ASC
   
   
    DEKLARARE @thisrdate DATE = NULL; -- Päivämäärä
    JULISTA @thisrnum INT=0; -- Valittujen huoneiden määrä nykyisenä päivänä
   
    DECARE @rdate DATE = NULL; -- Päivämäärä
    DEKLARE @rmnum INT = 0; -- Huoneiden määrä huonetyypin mukaan
   
    -- Sykli päivämäärän mukaan
    JULISTA @my_cursor2 KURSORI;
    aseta @my_cursor2 = KURSORI VALITSE info_id JOUKOSTA ##temp_room TILAA [PÄIVÄMÄÄRÄ] ASC, hinta ASC
    OPEN @my_cursor2;
    HAE SEURAAVAKSI @my_cursor2 SISÄÄN @infoid
    WHILE(@@FETCH_STATUS=0)
    ALOITA
        --##temp_result
        VALITSE @rmnum=jää, @rdate=[päivämäärä] LÄHTEESTÄ ##temp_room, MISSÄ info_id=@infoid
        JOS (@thisrdate ON NOLLA TAI @thisrdate != @rdate)
        ALOITA
            TULOSTA @rdate
            SET @thisrdate = @rdate;
            JOUKKO @thisrnum = 0;
        LOPPU
        -- Annoslomakkeen valintahuoneen tyyppi
        IF(@thisrnum <= @roomnum)
        ALOITA
            IF (@thisrnum + @rmnum > @roomnum)
            ALOITA
                -- Huoneiden määrä, joita sinun täytyy käyttää
                SET @rmnum = @roomnum-@thisrnum;
            LOPPU
        LOPPU
        MUUTEN   
        ALOITA
            -- Tilaa ei vaadita tuolle päivämäärälle
            JOUKKO @rmnum = 0;
        LOPPU
        
        JOS (@rmnum > 0)
        ALOITA
            -- Lisää tulokset määritellyn numeron mukaan
            LISÄÄ TIEDOSTOON ##temp_result(hotel_id, hotel_name, [date], room_id, room_name, room_num, huonehinta, dsumprice, davgprice, sumpric, sumavgpric)
            VALITSE @hid, '', @thisrdate, room_id, '', @rmnum, hinta, 0, 0, 0, 0 ###temp_room MISSÄ info_id = @infoid
            
            -- Huoneiden määrä on saavuttanut lasketun keskihinnan
            SET @thisrnum = @thisrnum + @rmnum;
            JOS (@thisrnum = @roomnum)
            ALOITA
                -- Kokonaishinta hotelleittain, laskettuna päivämäärille
                PÄIVITYS ##temp_result ASETA dsumprice=(VALITSE SUM(room_num*huonehinta) POIS ##temp_result TR MISSÄ tr.hotel_id=@hid JA TR.[ date]=@thisrdate) MISSÄ hotel_id=@hid JA [date]=@thisrdate
                -- Laske keskimääräinen huonehinta hotellin mukaan, kokonaishinta päivämäärän mukaan
                PÄIVITYS ##temp_result ASETA davgprice=(dsumprice/@roomnum) MISSÄ hotel_id=@hid JA [date]=@thisrdate
            LOPPU
        LOPPU

        NOUDA SEURAAVAKSI @my_cursor2 SISÄÄN @infoid;
    LOPPU   
    lähellä @my_cursor2;  --Sammuta kursori
    Deallocate @my_cursor2;   --vapauta kursori

    -- Hotellin mukaan laske hotellin kokonaishinta
    PÄIVITYS ##temp_result ASETA SUMPRIC=(VALITSE SUM(room_num*huonehinta) POIS ##temp_result TR MISSÄ tr.hotel_id=@hid) MISSÄ hotel_id=@hid
    -- Laske hotellin koko huoneen keskimääräinen päivittäinen hinta
    PÄIVITYS ##temp_result ASETA sumavgpric=(sumpric/@roomnum/@days) MISSÄ hotel_id=@hid

    NOUDA seuraavaksi my_cursor:sta @hid – siirry seuraavalle kursorille, ei kuolleita silmukoita
LOPPU  
Sulje my_cursor -- sulje kursori
Vapauta my_cursor - vapauta kursori


-- Lisää hotellin nimi ja huonetyypin nimi väliaikaiseen pöytään
PÄIVITYS ##temp_result ASETA hotel_name=(VALITSE ht.hotel_name DBO.hotel HT MISSÄ ht.hotel_id=##temp_result.hotel_id),
room_name=(VALITSE rt.room_name dbo.room_type RT:STÄ, MISSÄ rt.room_id=##temp_result.room_id)


-- Tarkista tulokset tulostaulukosta
VALITSE * JOUKOSTA ##temp_result




-- Lopeta väliaikaisten taulukoiden tyhjentäminen
JOS ON olemassa (valitse * joukosta tempdb.dbo.sysobjects, missä id = object_id(N'tempdb.. ##temp_hotel') ja type='U')
ALOITA
    Pudota pöytä ##temp_hotel
LOPPU
JOS ON olemassa (valitse * joukosta tempdb.dbo.sysobjects, missä id = object_id(N'tempdb.. ##temp_room') ja type='U')
ALOITA
    Pudota pöytä ##temp_room
LOPPU
JOS ON olemassa (valitse * joukosta tempdb.dbo.sysobjects, missä id = object_id(N'tempdb.. ##temp_result') ja type='U')
ALOITA
    Pudota pöytä ##temp_result
LOPPU

Pistetilanne

Osallistujien määrä1MB+1 myötävaikuttaa+1 Romahdus syy
Admin + 1 + 1 Innostunut auttamaan muita!

Katso kaikki arviot

 Vuokraisäntä| Julkaistu 6.12.2018 14.11.48 |
xzxmustwin Julkaistu 2018-12-6 klo 11:58
Rehellisesti sanottuna tämän taulukon rakenne on hieman kohtuuton

Emmmm-tietokantaopettajan antamat kotitehtävät saattavat todellakin olla kohtuuttomia, enkä nähnyt niitä, jos en oppinut niitä kovin hyvin...
Tärkeintä ovat kuitenkin ongelmanratkaisuideat, haluan kysyä ystäviltäni, onko teillä ehdotuksia?
 Vuokraisäntä| Julkaistu 6.12.2018 14.09.20 |
lzzsf julkaisi 2018-12-6 09:07
MySQL on vanhentunut, ei asiakasta, anna minulle SQL Serverin skripti

Pahoittelut, en ole vielä käyttänyt SQL Serveriä, ehkä koska se on vain opettamista, joten opettaja pyysi meitä käyttämään mysql:ää siihen. Jos ystäväsi ovat valmiita jakamaan ajatuksiaan, kiitos paljon.
Julkaistu 5.12.2018 21.57.13 |
Menen QQ-ryhmään tarjoamaan 10 yuanin palkkion nähdäkseni, voisiko joku auttaa sinua vastaamaan ei
Julkaistu 6.12.2018 7.56.39 |
Apua
Julkaistu 6.12.2018 9.07.08 |
MySQL on vanhentunut, ei asiakasta, anna minulle SQL Serverin skripti

Pistetilanne

Osallistujien määrä1MB+1 myötävaikuttaa+1 Romahdus syy
Admin + 1 + 1 Innostunut!

Katso kaikki arviot

Julkaistu 6.12.2018 11.24.25 |
lzzsf julkaisi 2018-12-6 09:07
MySQL on vanhentunut, ei asiakasta, anna minulle SQL Serverin skripti

On suositeltavaa keskustella ideasta ja antaa vuokranantajan käyttää sitä viitteenä, mikä pitäisi myös olla mahdollista
Julkaistu 6.12.2018 11.58.37 |
Rehellisesti sanottuna tämän taulukon rakenne on hieman kohtuuton

Pistetilanne

Osallistujien määrä1MB+1 myötävaikuttaa+1 Romahdus syy
Admin + 1 + 1 Innostunut!

Katso kaikki arviot

 Vuokraisäntä| Julkaistu 6.12.2018 14.07.29 |
Julkaistu 2018-12-5 klo 21:57
Menen QQ-ryhmään tarjoamaan 10 yuanin palkkion nähdäkseni, voisiko joku auttaa sinua vastaamaan ei

Kiitos, jos joku haluaa vastata, lähetän sinulle punaisen kirjekuoren :)
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com