Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 23250|Atbildi: 11

[Jauns izdevums] Kā izvēlēties lētākos n numurus

[Kopēt saiti]
Publicēts 05.12.2018 21:32:38 | | | |
Tagad ir jāizmanto divas tabulas, room_type un room_info
Ir 3 viesnīcas ar personu apliecinošiem dokumentiem 1~3. Tad katrā viesnīcā ir 3 numuru veidi, attiecīgi 1 ~ 9.
room_type satur katra numura tipa nosaukumu, ID un atbilstošo viesnīcas ID
room_info tiek glabāta katras dienas cena, katra numura veids un atlikušo istabu skaits.
Tēmas, kuras es vēlētos uzdot, ir šādas:
Norādiet rezervējamo numuru laika diapazonu un skaitu, vaicājiet viesnīcas, numuru veidu izvēli un to vidējās cenas, kas atbilst nosacījumiem (laiks, atlikušo numuru skaits), un kārtojiet tās pēc vidējās cenas no zemākās uz augstāko. Rezultāti ietver viesnīcas, izvēlētās numuru kombinācijas un daudzumus, kā arī zemāko vidējo cenu.
##不要求为同一房型, bet tai jābūt tai pašai viesnīcai, un jūs varat mainīt numura veidu vidū.
##比如, reģistrēšanās laiks ir 2018-11-14~2018-11-15, un rezervēto numuru skaits ir 5
##返回选择酒店A, 11-14 izvēlieties 4 numuru tipus ar ID 3, 1 numuru tipu ar ID 2, 11-15 izvēlieties 3 numuru tipus ar ID 3, 2 numuru tipus ar ID 2, un zemākā cena ir 2000
##老师要求只能用sql语句, MySQL ieviešana nevar izmantot Python, C ++ utt
Es to neuzrakstīju vienu dienu, un es neredzēju līdzīgu tēmu internetā, tāpēc es atnācu lūgt dieviem palīdzību, un es gribu jums jautāt, kā to panākt, paldies~







Iepriekšējo:PHP programmas pērtiķu pašu ziņotā pieredzes apmaiņa
Nākamo:2019. gada pēcdiploma iestājpārbaudījumu politika Xu Tao un Xiao Xiurong sprinta materiāli
Publicēts 06.12.2018 17:00:58 |
Šo ziņu pēdējo reizi rediģēja Miaolinsen 2018-12-6 17:03

Es to nedarīju ar mysql, es to darīju ar mssql:


/*
Norādiet rezervējamo numuru laika diapazonu un skaitu, vaicājiet viesnīcas, numuru veidu izvēli un to vidējās cenas, kas atbilst nosacījumiem (laiks, atlikušo numuru skaits), un kārtojiet tās pēc vidējās cenas no zemākās uz augstāko. Rezultāti ietver viesnīcas, izvēlētās numuru kombinācijas un daudzumus, kā arī zemāko vidējo cenu.
##不要求为同一房型, bet tai jābūt tai pašai viesnīcai, un jūs varat mainīt numura veidu vidū. -- Parsēšana: Tas nozīmē, ka nav jāņem vērā telpas tips, tiek ņemts vērā tikai istabu skaits
##比如, izvēlieties reģistrēšanās laiku 2018-11-14~2018-11-15, un rezervēto numuru skaits ir 5 -- Analīze: Viesnīcai jābūt datumu diapazonā, un katru dienu ir pieprasījums pēc numuru skaita (ja noteiktā dienā nav neviena, tas neatbildīs standartam)
##返回选择酒店A, 11-14 izvēlieties 4 numuru tipus ar ID 3, 1 numuru tipu ar ID 2, 11-15 izvēlieties 3 numuru tipus ar ID 3, 2 numuru tipus ar ID 2, un zemākā cena ir 2000 -- Analīze: Aprēķiniet vidējo cenu atbilstoši minimālajai konfigurācijai dienā
##老师要求只能用sql语句, MySQL ieviešana, nevar izmantot Python, C++ utt. */


-- Ienākošie parametri datumu diapazons, nepieciešamo numuru skaits
DEKLARĒT @sdate DATUMU = '2018-11-14';
DEKLARĒT @edate DATUMU = '2018-11-15';
DEKLARĒJIET @roomnum INT = 5;


-- Aprēķināt uzturēšanās dienu skaitu
DEKLARĒT @days INT;
SET @days = DATEDIFF(DAY, @sdate, @edate)+1;

-- Viesnīcas numurs, kas atbilst datumu diapazonam, numuru skaits
IF EXISTS(atlasiet * no tempdb.dbo.sysobjects, kur id = object_id(N'tempdb.. ##temp_hotel') un type='U')
SĀKT
    Nomest tabulu ##temp_hotel
BEIGAS

ATLASIET ta.hotel_id ##temp_hotel NO
(SELECT ri. [datums], rt.hotel_id, SUM(ri.remain) room_num FROM room_info ri LEFT JOIN room_type rt uz ri.room_id=rt.room_id kur @sdate <= [datums] un [datums] <= @edate GROUP BY ri. [datums],rt.hotel_id KAM SUM(paliek) >= 5) ta
GRUPĒT PĒC ta.hotel_id, KAM COUNT(*) = @days



-- Aprēķināts atbilstoši viesnīcai (konfigurēt minimālo numura veidu dienā)

IF EXISTS(atlasiet * no tempdb.dbo.sysobjects, kur id = object_id(N'tempdb.. ##temp_result') un type='U')
SĀKT
    Nomest tabulu ##temp_result
BEIGAS
-- Provizoriska rezultātu tabula Viesnīcas datums Numura veids ID Numura veids Nosaukums Numuru skaits Numura cena Viesnīca Dienas Kopā Viesnīca Dienas vidējā viesnīcas cena Viesnīca Kopējā viesnīcas cena Kopējā dienas cena Viesnīca Kopējā dienas numura cena
IZVEIDOT TABULU ##temp_result(
    hotel_id INT,
    hotel_name varchar(255),
    [datums] DATUMS,
    room_id INT,
    room_name VARČARS (255),
    room_num INT,
    istabas cena DECIMĀLDAĻĀ,
    dsumprice DECIMĀLDAĻĀ,
    davgprice DECIMAL,
    sumpric DECIMAL,
    sumavgpric DECIMAL
)

DEKLARĒT @hid INT; -- Viesnīcas ID
DEKLARĒT @infoid INT; -- Info ID
--apstipriniet, ka kursors ir kolekcija
DECLARE my_cursor kursoru (SELECT hotel_id no ##temp_hotel);
--Atvērt kursoru--
Atvērt my_cursor
--Start Loop kursora mainīgie--
Nākamā no my_cursor uz @hid
kamēr @@FETCH_STATUS = 0 -- atgriež pēdējā kursora stāvokli, ko izpilda FETCH priekšraksts --
SĀKT      
    -- Pamatojoties uz viesnīcas ID, tiek noteikta periodiskā datuma cena
    IF EXISTS(atlasiet * no tempdb.dbo.sysobjects, kur id = object_id(N'tempdb.. ##temp_room') un type='U')
    SĀKT
        nomest tabulu ##temp_room
    BEIGAS

    -- Viesnīcas, pēc datuma, ar numuriem, kas sakārtoti pēc datuma Cena
    SELECT info_id, [date], price, remain, room_id INTO ##temp_room FROM dbo.room_info WHERE @sdate <= [date] un [date] <= @edate UN PALIEK > 0 UN room_id (ATLASIET rt.room_id NO dbo.room_type rt KUR rt.hotel_id=@hid) PASŪTĪJUMS LĪDZ [datums] ASC, cena ASC
   
   
    DEKLARĒT @thisrdate DATUMU = NULL; -- Datums
    DEKLARĒJIET @thisrnum INT=0; -- Pašreizējā datumā izvēlēto istabu skaits
   
    DEKLARĒT @rdate DATUMU = NULL; -- Datums
    DEKLARĒJIET @rmnum INT = 0; -- Numuru skaits pēc numura veida
   
    -- Cikls pēc datuma
    PASLUDINĀT @my_cursor2 KURSORU;
    set @my_cursor2 = KURSORS ATLASĪT info_id NO ##temp_room ORDER BY [datums] ASC, cena ASC
    ATVĒRTS @my_cursor2;
    NĀKAMĀ IEGŪŠANA NO @my_cursor2 UZ @infoid
    WHILE(@@FETCH_STATUS=0)
    SĀKT
        --##temp_result
        SELECT @rmnum=palikt, @rdate=[datums] NO ##temp_room KUR info_id=@infoid
        JA (@thisrdate IR NULLE VAI @thisrdate != @rdate)
        SĀKT
            DRUKĀT @rdate
            SET @thisrdate = @rdate;
            SET @thisrnum = 0;
        BEIGAS
        -- Zāļu formas izvēle telpas tips
        IF(@thisrnum <= @roomnum)
        SĀKT
            IF (@thisrnum + @rmnum > @roomnum)
            SĀKT
                -- Izmantojamo istabu skaits
                SET @rmnum = @roomnum-@thisrnum;
            BEIGAS
        BEIGAS
        CITĀDI   
        SĀKT
            -- Šim datumam nav nepieciešama vieta
            IESTATIET @rmnum = 0;
        BEIGAS
        
        JA (@rmnum > 0)
        SĀKT
            -- Pievienojiet rezultātus pēc norādītā skaita
            IEVIETOT ##temp_result(hotel_id, hotel_name, [datums], room_id, room_name, room_num, roomprice, dsumprice, davgprice, sumpric, sumavgpric)
            ATLASIET @hid, '', @thisrdate, room_id, '', @rmnum, price, 0, 0, 0, 0 NO ##temp_room KUR info_id = @infoid
            
            -- Numuru skaits sasniedzis aprēķināto vidējo cenu
            SET @thisrnum = @thisrnum + @rmnum;
            IF (@thisrnum = @roomnum)
            SĀKT
                -- Kopējā cena pa viesnīcām, aprēķināta datumiem
                UPDATE ##temp_result SET dsumprice=(SELECT SUM(room_num*roomprice) FROM ##temp_result tr WHERE tr.hotel_id=@hid UN tr.[ datums]=@thisrdate) KUR hotel_id=@hid UN [datums]=@thisrdate
                -- Aprēķināt vidējo numura cenu pa viesnīcām, kopējo cenu pēc datuma
                UPDATE ##temp_result SET davgprice=(dsumprice/@roomnum) KUR hotel_id=@hid UN [datums]=@thisrdate
            BEIGAS
        BEIGAS

        NĀKAMĀ NO @my_cursor2 UZ @infoid;
    BEIGAS   
    tuvu @my_cursor2;  --Izslēdziet kursoru
    dedalēt @my_cursor2;   --atbrīvot kursoru

    -- Pēc viesnīcas aprēķiniet kopējo viesnīcas cenu
    UPDATE ##temp_result SET sumpric=(SELECT SUM(room_num*roomprice) FROM ##temp_result tr WHERE tr.hotel_id=@hid) WHERE hotel_id=@hid
    -- Aprēķināt kopējā numura vidējo dienas cenu viesnīcā
    ATJAUNINĀT ##temp_result SET sumavgpric=(sumpric/@roomnum/@days) KUR hotel_id=@hid

    FETCH Next no my_cursor uz @hid - pāriet uz nākamo kursoru, bez strupceļa
BEIGAS  
aizvērt my_cursor -- aizvērt kursoru
Atcelt my_cursor - atlaidiet kursoru


-- Pievienojiet viesnīcas nosaukumu un numura tipa nosaukumu pagaidu tabulai
ATJAUNINIET ##temp_result IESTATIET hotel_name=(ATLASIET ht.hotel_name NO dbo.hotel ht KUR ht.hotel_id=##temp_result.hotel_id),
room_name=(ATLASIET rt.room_name NO dbo.room_type rt KUR rt.room_id=##temp_result.room_id)


-- Pārbaudiet rezultātus no rezultātu tabulas
IZVĒLIETIES * NO ##temp_result




-- Izbeigt pagaidu tabulu notīrīšanu
IF EXISTS(atlasiet * no tempdb.dbo.sysobjects, kur id = object_id(N'tempdb.. ##temp_hotel') un type='U')
SĀKT
    Nomest tabulu ##temp_hotel
BEIGAS
IF EXISTS(atlasiet * no tempdb.dbo.sysobjects, kur id = object_id(N'tempdb.. ##temp_room') un type='U')
SĀKT
    nomest tabulu ##temp_room
BEIGAS
IF EXISTS(atlasiet * no tempdb.dbo.sysobjects, kur id = object_id(N'tempdb.. ##temp_result') un type='U')
SĀKT
    Nomest tabulu ##temp_result
BEIGAS

Vērtējums

Dalībnieku skaits1MB+1 Veicināt+1 Sakļaut iemesls
Admin + 1 + 1 Entuziasms palīdzēt citiem!

Skatīt visus vērtējumus

 Saimnieks| Publicēts 06.12.2018 14:11:48 |
xzxmustwin Publicēts 2018-12-6 11:58
Godīgi sakot, šīs tabulas struktūra ir nedaudz nepamatota

Emmmm datu bāzes skolotāja uzdotie mājasdarbu jautājumi patiešām var būt nepamatoti, un es to neredzēju, ja es to neiemācījos ļoti labi ...
Tomēr galvenais joprojām ir problēmu risināšanas idejas, es gribu pajautāt saviem draugiem, vai jums ir kādi ieteikumi?
 Saimnieks| Publicēts 06.12.2018 14:09:20 |
LZZSF Publicēts 2018-12-6 09:07
MySQL ir novecojis, nav klienta, dodiet man skriptu SQL Server

Atvainojiet, es vēl neesmu izmantojis SQL Sever, varbūt tāpēc, ka tas ir tikai mācīšana, tāpēc skolotājs lūdza mūs izmantot mysql, lai to izdarītu. Ja jūsu draugi vēlas dalīties savās idejās, liels paldies.
Publicēts 05.12.2018 21:57:13 |
Es došos uz QQ grupu, lai piedāvātu atlīdzību 10 juaņas, lai redzētu, vai kāds var palīdzēt jums atbildēt nē
Publicēts 06.12.2018 07:56:39 |
Palīgā
Publicēts 06.12.2018 09:07:08 |
MySQL ir novecojis, nav klienta, dodiet man skriptu SQL Server

Vērtējums

Dalībnieku skaits1MB+1 Veicināt+1 Sakļaut iemesls
Admin + 1 + 1 Entuziasms!

Skatīt visus vērtējumus

Publicēts 06.12.2018 11:24:25 |
LZZSF Publicēts 2018-12-6 09:07
MySQL ir novecojis, nav klienta, dodiet man skriptu SQL Server

Ieteicams runāt par ideju un ļaut saimniekam to izmantot kā atsauci, kas arī būtu iespējams
Publicēts 06.12.2018 11:58:37 |
Godīgi sakot, šīs tabulas struktūra ir nedaudz nepamatota

Vērtējums

Dalībnieku skaits1MB+1 Veicināt+1 Sakļaut iemesls
Admin + 1 + 1 Entuziasms!

Skatīt visus vērtējumus

 Saimnieks| Publicēts 06.12.2018 14:07:29 |
Publicēts 2018-12-5 21:57
Es došos uz QQ grupu, lai piedāvātu atlīdzību 10 juaņas, lai redzētu, vai kāds var palīdzēt jums atbildēt nē

Paldies, ja kāds ir gatavs atbildēt, es jums nosūtīšu sarkano aploksni :)
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com