Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 23250|Svare: 11

[Nytt nummer] Hvordan velge de billigste n rommene

[Kopier lenke]
Publisert på 05.12.2018 21:32:38 | | | |
Nå er det to tabeller å bruke, room_type og room_info
Det er 3 hoteller med ID 1~3. Deretter har hvert hotell 3 romtyper, med ID-er på henholdsvis 1~9.
room_type inneholder navn, ID og tilsvarende hotell-ID for hver romtype
Det som lagres i room_info er prisen for hver dag, hver romtype og antall rom som er igjen.
Temaene jeg ønsker å stille er:
Spesifiser tidsintervallet og antall rom som skal bookes, søk etter hoteller, romtyper og deres gjennomsnittspriser som oppfyller kravene (tid, antall rom igjen), og sorter dem etter gjennomsnittspris fra lavest til høyest. Resultatene inkluderer hoteller, utvalgte romkombinasjoner og mengder, samt lavest gjennomsnittspris.
##不要求为同一房型, men det må være det samme hotellet, og du kan endre romtypen underveis.
##比如, innsjekkingstiden er 2018-11-14~2018-11-15, og antall reserverte rom er 5
##返回选择酒店A, 11-14 velg 4 romtyper med ID 3, 1 romtype med ID 2, 11-15 velg 3 romtyper med ID 3, 2 romtyper med ID 2, og laveste pris er 2000
##老师要求只能用sql语句, MySQL-implementasjonen kan ikke bruke Python, C++, osv
Jeg skrev det ikke ut på en dag, og jeg så ikke et lignende tema på Internett, så jeg kom for å be gudene om hjelp, og jeg vil spørre deg hvordan jeg kan oppnå det, takk~







Foregående:PHP-programapes selvrapporterte erfaringsdeling
Neste:2019 postgraduate opptaksprøve politikk Xu Tao og Xiao Xiurongs sprintmateriell
Publisert på 06.12.2018 17:00:58 |
Dette innlegget ble sist redigert av Miaolinsen 6.12.2018 kl. 17:03

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


/*
Spesifiser tidsintervallet og antall rom som skal bookes, søk etter hoteller, romtyper og deres gjennomsnittspriser som oppfyller kravene (tid, antall rom igjen), og sorter dem etter gjennomsnittspris fra lavest til høyest. Resultatene inkluderer hoteller, utvalgte romkombinasjoner og mengder, samt lavest gjennomsnittspris.
##不要求为同一房型, men det må være det samme hotellet, og du kan endre romtypen underveis. -- Parsing: Det betyr at det ikke er nødvendig å ta hensyn til romtypen, kun antall rom tas med
##比如, velg innsjekkingstidspunktet 2018-11-14~2018-11-15, og antall reserverte rom er 5 -- Analyse: Hotellet må være innenfor datointervallet, og det er etterspørsel etter antall rom hver dag (hvis det ikke er noen på en bestemt dag, vil det ikke møte standarden)
##返回选择酒店A, 11-14 velg 4 romtyper med ID 3, 1 romtype med ID 2, 11-15 velg 3 romtyper med ID 3, 2 romtyper med ID 2, og laveste pris er 2000 -- Analyse: Beregn gjennomsnittsprisen i henhold til minimumskonfigurasjon per dag
##老师要求只能用sql语句, MySQL-implementering, kan ikke bruke Python, C++, osv. */


-- Innkommende parametere, datointervall, antall rom som kreves
OPPGI @sdate DATO = '2018-11-14';
OPPGI @edate DATO = '2018-11-15';
DEKLAR @roomnum INT = 5;


-- Beregn antall dager med opphold
ERKLÆR @days INT;
SETT @days = DATEDIFF(DAG, @sdate, @edate)+1;

-- Hotellnummer som oppfyller datointervallet, antall rom
IF EXISTS(velg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_hotel') og type='U')
START
    Slippbord ##temp_hotel
SLUTT

VELG ta.hotel_id i ##temp_hotel FRA
(VELG 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 [date] <= @edate GRUPPE ETTER ri. [dato],rt.hotel_id SOM HAR SUM(REMAIN) >= 5) ta
GRUPPER ETTER ta.hotel_id HAR TELLER(*) = @days



-- Beregnet i henhold til hotellet (konfigurer minimum romtype per dag)

IF EXISTS(velg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_result') og type='U')
START
    Slippbord ##temp_result
SLUTT
-- Foreløpig resultattabell Hotelldato Romtype ID Romtype Navn Antall rom Pris Hotell Daglig total hotellpris Gjennomsnittlig hotellpris Hotell totalt hotellpris Totalt Daglig gjennomsnittspris på hotell Totalt daglig gjennomsnittspris på hotell Totalt daglig rompris
OPPRETT TABELL ##temp_result(
    hotel_id INT,
    hotel_name varchar(255),
    [dato] DATO,
    room_id INT,
    room_name VARCHAR (255),
    room_num INT,
    rompris DESIMAL,
    dsumpris DECIMAL,
    davgprice DESIMAL,
    SUMPRIC DESIMAL,
    sumavgpric DESIMAL
)

KUNNGJØR @hid INT; -- Hotell-ID
ERKLÆR @infoid INT; -- info id
--bekrefte at markøren er en samling
DEKLAR my_cursor markør for (VELG hotel_id fra ##temp_hotel);
--Åpen markør--
Åpne my_cursor
--Start Loop Cursor-variabler--
hent neste fra my_cursor inn i @hid
mens @@FETCH_STATUS = 0 -- returnerer tilstanden til den siste markøren utført av FETCH-setningen --
START      
    -- Basert på hotell-ID, prises den gjentakende datoen
    IF EXISTS(velg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_room') og type='U')
    START
        Slippbord ##temp_room
    SLUTT

    -- Hoteller, etter dato, med rom sortert etter dato Pris
    VELG info_id, [dato], pris, forbli, room_id INN I ##temp_room FRA dbo.room_info HVOR @sdate <= [dato] og [dato] <= @edate OG forbli > 0 OG room_id I (VELG rt.room_id FRA dbo.room_type rt HVOR rt.hotel_id=@hid) BESTILL ETTER [dato] ASC, pris ASC
   
   
    ERKLÆR @thisrdate DATO = NULL; -- Date
    ERKLÆR @thisrnum INT=0; -- Antall rom valgt på gjeldende dato
   
    ERKLÆR @rdate DATO = NULL; -- Date
    ERKLÆR @rmnum INT = 0; -- Antall rom etter romtype
   
    -- Syklus etter dato
    DEKLAR @my_cursor2 MARKØR;
    sett @my_cursor2 = MARKØR FOR VELG info_id FRA ##temp_room ORDNE ETTER [dato] ASC, pris ASC
    ÅPNE @my_cursor2;
    HENT NESTE FRA @my_cursor2 TIL @infoid
    WHILE(@@FETCH_STATUS=0)
    START
        --##temp_result
        VELG @rmnum=forbli, @rdate=[dato] FRA ##temp_room HVOR info_id=@infoid
        HVIS (@thisrdate ER NULL ELLER @thisrdate != @rdate)
        START
            TRYKK @rdate
            SETT @thisrdate = @rdate;
            SETT @thisrnum = 0;
        SLUTT
        -- Romtype for valg av doseringsform
        HVIS(@thisrnum <= @roomnum)
        START
            HVIS (@thisrnum + @rmnum > @roomnum)
            START
                -- Antall rom du må bruke
                SETT @rmnum = @roomnum-@thisrnum;
            SLUTT
        SLUTT
        ELSE   
        START
            -- Det trengs ikke plass til den datoen
            SETT @rmnum = 0;
        SLUTT
        
        HVIS (@rmnum > 0)
        START
            -- Legg til resultater etter spesifisert antall
            SETT INN I ##temp_result(hotel_id, hotel_name, [dato], room_id, room_name, room_num, roomprice, dsumprice, davgprice, sumpric, sumavgpric)
            VELG @hid, '', @thisrdate, room_id, '', @rmnum, pris, 0, 0, 0 FRA ##temp_room HVOR info_id = @infoid
            
            -- Antall rom har nådd den beregnede gjennomsnittsprisen
            SETT @thisrnum = @thisrnum + @rmnum;
            HVIS (@thisrnum = @roomnum)
            START
                -- Totalpris per hotell, beregnet for datoer
                OPPDATERING ##temp_result SETT dsumprice=(VELG 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 gjennomsnittlig rompris per hotell, total pris per dato
                OPPDATERING ##temp_result SETT davgprice=(dsumprice/@roomnum) HVOR hotel_id=@hid OG [date]=@thisrdate
            SLUTT
        SLUTT

        HENT NESTE FRA @my_cursor2 TIL @infoid;
    SLUTT   
    Nær @my_cursor2;  --Slå av markøren
    Deallocate @my_cursor2;   --frigjøringsmarkør

    -- Etter hotell, beregn den totale hotellprisen
    OPPDATERING ##temp_result SETT sumpric=(VELG SUM(room_num*roomprice) FRA ##temp_result tr HVOR tr.hotel_id=@hid) HVOR hotel_id=@hid
    -- Beregne gjennomsnittlig dagspris for det totale rommet på hotellet
    OPPDATERING ##temp_result SETT sumavgpric=(sumpric/@roomnum/@days) HVOR hotel_id=@hid

    HENT neste fra my_cursor inn i @hid – gå til neste markør, ingen deadloops
SLUTT  
lukk my_cursor – lukk markøren
Utplasser my_cursor – slipp markøren


-- Legg til hotellnavnet og romtypenavnet i den midlertidige tabellen
OPPDATERING ##temp_result SETT hotel_name=(VELG ht.hotel_name FRA dbo.hotel HT HVOR ht.hotel_id=##temp_result.hotel_id),
room_name=(VELG rt.room_name FRA dbo.room_type RT HVOR rt.room_id=##temp_result.room_id)


-- Sjekk resultatene fra resultattabellen
VELG * FRA ##temp_result




-- Avslutt tøming av midlertidige tabeller
IF EXISTS(velg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_hotel') og type='U')
START
    Slippbord ##temp_hotel
SLUTT
IF EXISTS(velg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_room') og type='U')
START
    Slippbord ##temp_room
SLUTT
IF EXISTS(velg * fra tempdb.dbo.sysobjects hvor id = object_id(N'tempdb.. ##temp_result') og type='U')
START
    Slippbord ##temp_result
SLUTT

Score

Antall deltakere1MB+1 bidra+1 Sammenbrudd grunn
Admin + 1 + 1 Entusiastisk for å hjelpe andre!

Se alle vurderinger

 Vert| Publisert på 06.12.2018 14:11:48 |
xzxmustwin Publisert 6.12.2018 11:58
For å være ærlig er strukturen på denne tabellen litt urimelig

Leksespørsmålene gitt av læreren i emmmm-databasen kan faktisk være urimelige, og jeg så det ikke hvis jeg ikke lærte det veldig godt...
Men nøkkelen er fortsatt problemløsningsideene, jeg vil spørre vennene mine om dere har noen forslag?
 Vert| Publisert på 06.12.2018 14:09:20 |
LZZSF publisert 6.12.2018 09:07
MySQL er utdatert, ingen klient, gi meg skriptet for SQL Server

Beklager, jeg har ikke brukt SQL Sever ennå, kanskje fordi det bare er undervisning, så læreren ba oss bruke mysql til det. Hvis vennene dine er villige til å dele sine ideer, tusen takk.
Publisert på 05.12.2018 21:57:13 |
Jeg går til QQ-gruppen for å tilby en belønning på 10 yuan for å se om noen kan hjelpe deg med å svare nei
Publisert på 06.12.2018 07:56:39 |
Hjelp
Publisert på 06.12.2018 09:07:08 |
MySQL er utdatert, ingen klient, gi meg skriptet for SQL Server

Score

Antall deltakere1MB+1 bidra+1 Sammenbrudd grunn
Admin + 1 + 1 Entusiastisk!

Se alle vurderinger

Publisert på 06.12.2018 11:24:25 |
LZZSF publisert 6.12.2018 09:07
MySQL er utdatert, ingen klient, gi meg skriptet for SQL Server

Det anbefales å snakke om ideen og la utleier bruke den som referanse, noe som også bør være mulig
Publisert på 06.12.2018 11:58:37 |
For å være ærlig er strukturen på denne tabellen litt urimelig

Score

Antall deltakere1MB+1 bidra+1 Sammenbrudd grunn
Admin + 1 + 1 Entusiastisk!

Se alle vurderinger

 Vert| Publisert på 06.12.2018 14:07:29 |
Publisert 2018-12-5 kl. 21:57
Jeg går til QQ-gruppen for å tilby en belønning på 10 yuan for å se om noen kan hjelpe deg med å svare nei

Takk, hvis noen er villige til å svare, sender jeg deg den røde konvolutten :)
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com