Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 23250|Svar: 11

[Nyt nummer] Hvordan vælger du de billigste n værelser

[Kopier link]
Opslået på 05/12/2018 21.32.38 | | | |
Nu er der to tabeller at bruge, room_type og room_info
Der er 3 hoteller med ID 1~3. Hvert hotel har 3 værelsestyper med ID'er på henholdsvis 1~9.
room_type indeholder navn, ID og tilsvarende hotel-ID for hver værelsestype
Det, der opbevares i room_info, er prisen for hver dag, hver værelsestype og antallet af tilbageværende værelser.
De emner, jeg gerne vil stille op, er:
Angiv tidsintervallet og antallet af værelser, der skal bookes, forespørg hotellerne, værelsestyper og deres gennemsnitlige priser, der opfylder betingelserne (tid, antal værelser tilbage), og sorter dem efter gennemsnitspris fra lavest til højest. Resultaterne inkluderer hoteller, udvalgte værelseskombinationer og mængder samt den laveste gennemsnitspris.
##不要求为同一房型, men det må være det samme hotel, og du kan ændre værelsestypen undervejs.
##比如, indtjekningstiden er 2018-11-14~2018-11-15, og antallet af reserverede værelser er 5
##返回选择酒店A, 11-14 vælg 4 værelsestyper med ID 3, 1 værelsestype med ID 2, 11-15 vælg 3 værelsestyper med ID 3, 2 værelsestyper med ID 2, og den laveste pris er 2000
##老师要求只能用sql语句, MySQL-implementeringen kan ikke bruge Python, C++ osv
Jeg skrev det ikke ned i en dag, og jeg så ikke et lignende emne på internettet, så jeg kom for at bede guderne om hjælp, og jeg vil spørge dig, hvordan du opnår det, tak~







Tidligere:PHP-programmets selvrapporterede erfaringsdeling
Næste:2019 postgraduate optagelsesprøve politik Xu Tao og Xiao Xiurongs sprintmaterialer
Opslået på 06/12/2018 17.00.58 |
Dette indlæg blev sidst redigeret af Miaolinsen den 6-12-2018 kl. 17:03

Jeg gjorde det ikke med MySQL, jeg gjorde det med mssql:


/*
Angiv tidsintervallet og antallet af værelser, der skal bookes, forespørg hotellerne, værelsestyper og deres gennemsnitlige priser, der opfylder betingelserne (tid, antal værelser tilbage), og sorter dem efter gennemsnitspris fra lavest til højest. Resultaterne inkluderer hoteller, udvalgte værelseskombinationer og mængder samt den laveste gennemsnitspris.
##不要求为同一房型, men det må være det samme hotel, og du kan ændre værelsestypen undervejs. -- Parsing: Det betyder, at der ikke er behov for at tage hensyn til rumtypen, kun antallet af rum tages i betragtning
##比如, vælg check-in tidspunktet 2018-11-14~2018-11-15, og antallet af bookede værelser er 5 -- Analyse: Hotellet skal være inden for datointervallet, og der er efterspørgsel efter antal værelser hver dag (hvis der ikke er nogen på en bestemt dag, vil det ikke opfylde standarden)
##返回选择酒店A, 11-14 vælg 4 værelsestyper med ID 3, 1 værelsestype med ID 2, 11-15 vælg 3 værelsestyper med ID 3, 2 værelsestyper med ID 2, og den laveste pris er 2000 -- Analyse: Beregn gennemsnitsprisen i henhold til minimumskonfigurationen pr. dag
##老师要求只能用sql语句, MySQL-implementering, kan ikke bruge python, c++ osv. */


-- Indkommende parametre, datointerval, antal ønskede værelser
OPLYS @sdate DATO = '2018-11-14';
OPLYS @edate DATO = '2018-11-15';
DEKLAR @roomnum INT = 5;


-- Beregn antallet af opholdsdage
ERKLÆR @days INT;
SÆT @days = DATO U(DAG, @sdate, @edate)+1;

-- Hotelnummer, der opfylder datointervallet, antal værelser
IF EXISTS(vælg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_hotel') og type='U')
BEGYND
    Drop-tabel ##temp_hotel
SLUT

VÆLG ta.hotel_id i ##temp_hotel FRA
(VÆLG ri. [dato], rt.hotel_id, SUM(ri.remain) room_num FRA room_info ri VENSTRE JOIN room_type rt på ri.room_id=rt.room_id hvor @sdate <= [dato] og [dato] <= @edate GRUPPE EFTER ri. [dato],rt.hotel_id HAR SUM(REMAIN) >= 5) ta
GRUPPER EFTER ta.hotel_id HAR TÆLLE(*) = @days



-- Beregnet i henhold til hotellet (indstil minimumsværelsestypen pr. dag)

IF EXISTS(vælg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_result') og type='U')
BEGYND
    Drop-bord ##temp_result
SLUT
-- Foreløbig resultattabel Hoteldato Værelsestype ID Værelsestype Værelsestype Navn Antal værelser Værelsespris Hotel Dagligt samlet hotelpris Daglig gennemsnitlig hotelpris Samlet hotelpris Hotel samlet daglig gennemsnitspris på hotellet samlet daglig værelsespris
OPRET TABEL ##temp_result(
    hotel_id INT,
    hotel_name varchar(255),
    [dato] DATO,
    room_id INT,
    room_name VARCHAR (255),
    room_num INT,
    værelsespris DECIMAL,
    dsumpris DECIMAL,
    davgprice DECIMAL,
    Sumpric DECIMAL,
    SUMAVGPRIC DECIMAL
)

ERKLÆRE @hid INT; -- Hotel-ID
ERKLÆR @infoid INT; -- info id
--bekræfte, at markøren er en samling
DEKLAR my_cursor markør for (SELECT hotel_id fra ##temp_hotel);
--Åbn markøren--
Åbn my_cursor
--Start Loop Cursor Variable--
hent næste fra my_cursor ind i @hid
mens @@FETCH_STATUS = 0 -- returnerer tilstanden for den sidste markør, der blev udført af FETCH-sætningen --
BEGYND      
    -- Baseret på hotellets ID er den tilbagevendende dato prissat
    IF EXISTS(vælg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_room') og type='U')
    BEGYND
        Drop table ##temp_room
    SLUT

    -- Hoteller, efter dato, med værelser sorteret efter dato Pris
    VÆLG info_id, [dato], pris, forbliv, room_id IND I ##temp_room FRA dbo.room_info HVOR @sdate <= [dato] og [dato] <= @edate OG FORBLIV > 0 OG room_id I (VÆLG rt.room_id FRA dbo.room_type rt HVOR rt.hotel_id=@hid) ORDEN EFTER [dato] ASC, pris ASC
   
   
    OPLYS @thisrdate DATO = NULL; -- Date
    DEKLAR @thisrnum INT=0; -- Antal værelser valgt på den aktuelle dato
   
    ERKLÆRE @rdate DATO = NULL; -- Date
    DEKLAR @rmnum INT = 0; -- Antal værelser efter rumtype
   
    -- Cyklus efter dato
    DEKLAR @my_cursor2 MARKØR;
    sæt @my_cursor2 = MARKØR FOR VÆLG info_id FRA ##temp_room ORDEN EFTER [dato] ASC, pris ASC
    ÅBN @my_cursor2;
    HENT NÆSTE FRA @my_cursor2 TIL @infoid
    WHILE(@@FETCH_STATUS=0)
    BEGYND
        --##temp_result
        VÆLG @rmnum=forbliv, @rdate=[dato] FRA ##temp_room HVOR info_id=@infoid
        HVIS (@thisrdate ER NULL ELLER @thisrdate != @rdate)
        BEGYND
            PRINT @rdate
            SÆT @thisrdate = @rdate;
            SÆT @thisrnum = 0;
        SLUT
        -- Doseringsformudvælgelsesrumtype
        HVIS(@thisrnum <= @roomnum)
        BEGYND
            HVIS (@thisrnum + @rmnum > @roomnum)
            BEGYND
                -- Antallet af værelser, du skal bruge
                SÆT @rmnum = @roomnum-@thisrnum;
            SLUT
        SLUT
        ELSE   
        BEGYND
            -- Der kræves ikke plads til den dato
            SÆT @rmnum = 0;
        SLUT
        
        HVIS (@rmnum > 0)
        BEGYND
            -- Tilføj resultater efter angivet antal
            INDSÆT I ##temp_result(hotel_id, hotel_name, [dato], room_id, room_name, room_num, roomprice, dsumprice, davgprice, sumpric, sumavgpric)
            VÆLG @hid, '', @thisrdate, room_id, '', @rmnum, pris, 0, 0, 0, 0 FRA ##temp_room HVOR info_id = @infoid
            
            -- Antallet af værelser har nået den beregnede gennemsnitspris
            SÆT @thisrnum = @thisrnum + @rmnum;
            HVIS (@thisrnum = @roomnum)
            BEGYND
                -- Samlet pris pr. hotel, beregnet for datoer
                OPDATERING ##temp_result SÆT dsumprice=(VÆLG SUM(room_num*roomprice) FRA ##temp_result tr HVOR tr.hotel_id=@hid OG tr.[ dato]=@thisrdate) HVOR hotel_id=@hid OG [dato]=@thisrdate
                -- Beregn den gennemsnitlige værelsespris pr. hotel, total pris pr. dato
                OPDATERING ##temp_result SÆT davgprice=(dsumprice/@roomnum) HVOR hotel_id=@hid OG [date]=@thisrdate
            SLUT
        SLUT

        HENT NÆSTE FRA @my_cursor2 TIL @infoid;
    SLUT   
    tæt @my_cursor2;  --Sluk for markøren
    Udnyt @my_cursor2;   --frigivelsesmarkør

    -- Efter hotel, beregn den samlede hotelpris
    OPDATERING ##temp_result SÆT sumpric=(VÆLG SUM(room_num*roomprice) FRA ##temp_result tr HVOR tr.hotel_id=@hid) HVOR hotel_id=@hid
    -- Beregn den gennemsnitlige daglige pris for det samlede værelse på hotellet
    OPDATERING ##temp_result SÆT sumavgpric=(sumpric/@roomnum/@days) HVOR hotel_id=@hid

    HENT næste fra my_cursor ind i @hid – gå til næste cursor, ingen deadloops
SLUT  
Luk my_cursor – luk markøren
Placer my_cursor - frigiv markøren


-- Tilføj hotellets navn og værelsestypen til den midlertidige tabel
OPDATERING ##temp_result SÆT hotel_name=(VÆLG ht.hotel_name FRA dbo.hotel ht hvor ht.hotel_id=##temp_result.hotel_id),
room_name=(VÆLG rt.room_name FRA dbo.room_type RT HVOR rt.room_id=##temp_result.room_id)


-- Tjek resultaterne fra resultattabellen
VÆLG * FRA ##temp_result




-- Stop oprydning af midlertidige tabeller
IF EXISTS(vælg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_hotel') og type='U')
BEGYND
    Drop-tabel ##temp_hotel
SLUT
IF EXISTS(vælg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_room') og type='U')
BEGYND
    Drop table ##temp_room
SLUT
IF EXISTS(vælg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_result') og type='U')
BEGYND
    Drop-bord ##temp_result
SLUT

Score

Antal deltagere1MB+1 bidrage+1 Sammenbrud årsag
Admin + 1 + 1 Entusiastisk omkring at hjælpe andre!

Se alle vurderinger

 Udlejer| Opslået på 06/12/2018 14.11.48 |
xzxmustwin Opslået den 6-12-2018 11:58
For at være ærlig er strukturen på dette bord lidt urimelig

De lektiespørgsmål, som emmmm-databaselæreren giver, kan faktisk være urimelige, og jeg så det ikke, hvis jeg ikke lærte det særlig godt...
Men nøglen er stadig problemløsningsidéerne, jeg vil gerne spørge mine venner, om I har nogle forslag?
 Udlejer| Opslået på 06/12/2018 14.09.20 |
LZZSF postet den 6-12-2018 09:07
MySQL er forældet, ingen klient, giv mig scriptet til SQL Server

Undskyld, jeg har ikke brugt SQL Server endnu, måske fordi det bare er undervisning, så læreren bad os bruge MySQL til det. Hvis dine venner er villige til at dele deres idéer, mange tak.
Opslået på 05/12/2018 21.57.13 |
Jeg går til QQ-gruppen for at tilbyde en dusør på 10 yuan for at se, om nogen kan hjælpe dig med at svare nej
Opslået på 06/12/2018 07.56.39 |
Hjælp
Opslået på 06/12/2018 09.07.08 |
MySQL er forældet, ingen klient, giv mig scriptet til SQL Server

Score

Antal deltagere1MB+1 bidrage+1 Sammenbrud årsag
Admin + 1 + 1 Entusiastisk!

Se alle vurderinger

Opslået på 06/12/2018 11.24.25 |
LZZSF postet den 6-12-2018 09:07
MySQL er forældet, ingen klient, giv mig scriptet til SQL Server

Det anbefales at tale om idéen og lade udlejeren bruge den som reference, hvilket også burde være muligt
Opslået på 06/12/2018 11.58.37 |
For at være ærlig er strukturen på dette bord lidt urimelig

Score

Antal deltagere1MB+1 bidrage+1 Sammenbrud årsag
Admin + 1 + 1 Entusiastisk!

Se alle vurderinger

 Udlejer| Opslået på 06/12/2018 14.07.29 |
Udgivet den 5-12-2018 kl. 21:57
Jeg går til QQ-gruppen for at tilbyde en dusør på 10 yuan for at se, om nogen kan hjælpe dig med at svare nej

Tak, hvis nogen vil svare, sender jeg dig den røde kuvert :)
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com