Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 23250|Válasz: 11

[Új szám] Hogyan válasszuk a legolcsóbb n szobákat

[Linket másol]
Közzétéve 2018. 12. 05. 21:32:38 | | | |
Most már két táblázat van, room_type és room_info
Három szálloda van, amelynek azonosítója 1~3. Ezután minden szállodának 3 szobatípusa van, azonosító száma 1~9.
A room_type tartalmazza minden szobatípus nevét, azonosítóját és megfelelő szállodaazonosítóját
A room_info tárolja a nap árát, a szobatípusokat és a megmaradt szobák számát.
A témák, amiket szeretnék megkérdezni:
Határozd meg az időintervallit és a foglalandó szobák számát, kérdezze le a szállodákat, szobatípusokat és az átlagos árakat, amelyek megfelelnek a feltételeknek (idő, maradék szobák száma), és válogatd be az átlagos árakat a legalacsonyabbtól a legmagasabbig. Az eredmények tartalmazzák a szállodákat, a kiválasztott szobakombinációkat és mennyiségeket, valamint a legalacsonyabb átlagos árat.
##不要求为同一房型, de biztosan ugyanaz a hotel, és a szobatípust is félúton lehet megváltoztatni.
##比如, a bejelentkezési idő 2018-11-14~2018-11-15, és a foglalt szobák száma 5
##返回选择酒店A, 11-14 válassz 4 szobatípust 3-as azonosítóval, 1 szobatípust 2-es azonosítóval, 11-15 szobatípust 3-as azonosítóval, 2 szobatípust 2-es azonosítóval, és a legalacsonyabb ár 2000
##老师要求只能用sql语句, a MySQL implementáció nem használhat Pythont, C++-t stb.
Egy napig nem írtam le, és nem láttam hasonló témát az interneten, ezért azért jöttem, hogy segítséget kérjek az istenektől, és szeretném megkérdezni, hogyan lehet ezt elérni, köszönöm~







Előző:PHP program ape önbevallásos tapasztalatmegosztása
Következő:2019-es posztgraduális felvételi vizsga politika Xu Tao és Xiao Xiurong sprint anyagai
Közzétéve 2018. 12. 06. 17:00:58 |
Ezt a bejegyzést utoljára Miaolinsen szerkesztette: 2018-12-6, 17:03

Nem a mysql-lel csináltam, hanem mssql-lel:


/*
Határozd meg az időintervallit és a foglalandó szobák számát, kérdezze le a szállodákat, szobatípusokat és az átlagos árakat, amelyek megfelelnek a feltételeknek (idő, maradék szobák száma), és válogatd be az átlagos árakat a legalacsonyabbtól a legmagasabbig. Az eredmények tartalmazzák a szállodákat, a kiválasztott szobakombinációkat és mennyiségeket, valamint a legalacsonyabb átlagos árat.
##不要求为同一房型, de biztosan ugyanaz a hotel, és a szobatípust is félúton lehet megváltoztatni. -- Elemzés: Ez azt jelenti, hogy nincs szükség a szobatípusra való figyelembe, csak a szobák számát veszik figyelemre
##比如, válaszd ki a bejelentkezési időpontot 2018-11-14~2018-11-15, és a foglalt szobák száma 5 -- Elemzés: A szállodának a dátumtartományban kell lennie, és minden nap igény van a szobák számára (ha egy adott napon nincs senki, az nem felel meg a szabványnak)
##返回选择酒店A, 11-14 válassz 4 szobatípust 3-as azonosítóval, 1 szobatípust 2-es azonosítóval, 11-15 3-as szobatípust 3-as azonosítóval, 2 szobatípust 2-es azonosítóval, és a legalacsonyabb ár 2000 -- Elemzés: Az átlagos árat a napi minimum konfiguráció alapján számoljuk ki
##老师要求只能用sql语句, MySQL implementáció, nem tudja használni a pythont, c++-t stb. */


-- Bejövő paraméterek dátumtartománya, szükséges szobák száma
DEKLARARE @sdate DÁTUM = '2018-11-14';
DEKLARARE @edate DÁTUM = '2018-11-15';
DEKLARARE @roomnum INT = 5;


-- Számold ki a tartózkodási napok számát
DEKLARARE @days INT;
HALMAZ: @days = DATEDIFF(NAP, @sdate, @edate)+1;

-- A szálloda száma, amely megfelel a dátumtartománynak, szoba száma
IF LÉTEZIK(válassz * a tempdb.dbo.sysobjects között, ahol id = object_id(N'tempdb.. ##temp_hotel') és type='U')
KEZDJÜK
    Dobóasztal ##temp_hotel
VÉGE

VÁLASZD ta.hotel_id A ##temp_hotel-BE INNEN.
(SELECT ri. [dátum], rt.hotel_id, SUM(ri.marad) room_num room_info RI BAL OLDALRÓL CSATLAKOZNAK room_type rt ri.room_id=rt.room_id AHOL @sdate <= [dátum] és [dátum] <= @edate CSOPORTOT RI-BEN. [date],rt.hotel_id HAVING SUM(REMAIN) >= 5) ta
CSOPORTOSÍTSUNK ta.hotel_id COUNT(*) = @days



-- A szálloda szerint számítva (napi minimum szobatípus beállítása)

IF LÉTEZIK(válassz * a tempdb.dbo.sysobjects között, ahol id = object_id(N'tempdb.. ##temp_result') és type='U')
KEZDJÜK
    Dobd le az asztalt ##temp_result
VÉGE
-- Ideiglenes eredmények táblázata Hotel dátum szoba típusa azonosító szoba típus név szoba száma szobaár szálloda napi összesen hotel napi átlagos szállodaár hotel összesített ár hotel összesen a szálloda ára hotel összesen napi átlagos ára a szálloda összes napi szobaára
KÉSZÍTSD TÁBLÁZATOT ##temp_result(
    hotel_id INT,
    hotel_name Varchar(255),
    [dátum] DÁTUM,
    room_id INT,
    room_name VARCHAR(255),
    room_num INT,
    szobaár DECIMÁLIS,
    dsumprice DECIMÁLIS,
    davgprice DECIMÁLIS,
    sumpric DECIMAL,
    sumavgpric DECIMÁLIS
)

DECLARARE @hid INT; -- Hotel igazolvás
DEKLARARE @infoid INT; -- info ID
--megerősíteni, hogy a kurzor egy gyűjtemény
DECLARE my_cursor kurzort (SELECT hotel_id ##temp_hotel-ból);
--Nyisd ki a kurzort--
Nyisd my_cursor
--Start Loop kurzor változók--
Hozd következő my_cursor-ből @hid
míg @@FETCH_STATUS = 0 -- adja vissza az utolsó kurzor állapotát, amelyet a FETCH utasítás hajt végre --
KEZDJÜK      
    -- A szállodai azonosító alapján az ismétlődő dátum megvan az árat
    IF LÉTEZIK(válassz * a tempdb.dbo.sysobjects között, ahol id = object_id(N'tempdb.. ##temp_room') és type='U')
    KEZDJÜK
        Dobd le az asztalt ##temp_room
    VÉGE

    -- Szállodák, dátum szerint, szobák dátum szerint rendezve Árfolyam
    VÁLASZD info_id, [dátum], ár, marad, room_id BE A ##temp_room A dbo.room_info-BÓL, AHOL @sdate <= [dátum] és [dátum] <= @edate ÉS MARADJ > 0 ÉS room_id IN (VÁLASSZ rt.room_id A dbo.room_type RT, AHOL rt.hotel_id=@hid) RENDELÉS [dátum] ASC, ár ASC
   
   
    DEKLARARE @thisrdate DATE = NULL; -- Dátum
    DEKLARARE @thisrnum INT=0; -- A jelenlegi időpontban kiválasztott szobák száma
   
    DEKLARARE @rdate DATE = NULL; -- Dátum
    DEKLARARE @rmnum INT = 0; -- A szobák száma szobatípus szerint
   
    -- Dátum szerinti ciklus
    DECKARE @my_cursor2 KURZOR;
    Állítsd @my_cursor2 = KURZORT A KIVÁLASZTOTT info_id A ##temp_room RENDELÉS [DÁTUM] SZERINT ASC, ÁR ASC
    NYISD @my_cursor2;
    HOZD KÖVETKEZŐ @my_cursor2 BE @infoid
    WHILE(@@FETCH_STATUS=0)
    KEZDJÜK
        --##temp_result
        VÁLASZD @rmnum=marad, @rdate=[dátum] A ##temp_room-TŐL, AHOL info_id=@infoid
        HA (@thisrdate NULL VAGY @thisrdate != @rdate)
        KEZDJÜK
            NYOMTATJA @rdate
            SET @thisrdate = @rdate;
            HALMAZ: @thisrnum = 0;
        VÉGE
        -- Adagolási űrlap kiválasztó szoba típusa
        HA(@thisrnum <= @roomnum)
        KEZDJÜK
            IF (@thisrnum + @rmnum > @roomnum)
            KEZDJÜK
                -- Hány szobát kell használni
                SET @rmnum = @roomnum-@thisrnum;
            VÉGE
        VÉGE
        MÁS   
        KEZDJÜK
            -- Ehhez a dátumhoz nincs szükség helyre
            HALMAZ: @rmnum = 0;
        VÉGE
        
        IF (@rmnum > 0)
        KEZDJÜK
            -- Eredmények hozzáadása meghatározott szám szerint
            BEKERÜLJ ##temp_result(hotel_id, hotel_name, [dátum], room_id, room_name, room_num, szobaár, dsumprice, davgprice, sumpric, sumavgpric)
            VÁLASZD @hid, '', @thisrdate, room_id, '', @rmnum, price, 0, 0, 0, 0 A ###temp_room AHOL info_id = @infoid
            
            -- A szobák száma elérte a számított átlagárat
            HALMAZ: @thisrnum = @thisrnum + @rmnum;
            IF (@thisrnum = @roomnum)
            KEZDJÜK
                -- Teljes ár szállodánként, dátumokra számítva
                FRISSÍTÉS ##temp_result ÁLLÍTSD BE DSUMPRICE=(SELECT SUM(room_num*roomprice) FROM ##temp_result TR, AHOL tr.hotel_id=@hid ÉS TR.[ date]=@thisrdate) AHOL hotel_id=@hid ÉS [dátum]=@thisrdate
                -- Számold ki az átlagos szobaárat szállodák szerint, az összárat dátum szerint
                FRISSÍTÉS ##temp_result ÁLLÍTSA DAVGPRICE=(dsumprice/@roomnum) AHOL hotel_id=@hid ÉS [dátum]=@thisrdate
            VÉGE
        VÉGE

        KÖVETKEZŐ A @my_cursor2 A @infoid-BE;
    VÉGE   
    közel @my_cursor2;  --Kapcsold ki a kurzort
    Deallocate @my_cursor2;   --szabadon engedje ki a kurzort

    -- Hotelként számold ki a teljes szállodaárat
    FRISSÍTÉS ##temp_result ÁLLÍTSD SUMPRIC=(SELECT SUM(room_num*roomprice) FROM ##temp_result TR WHERE tr.hotel_id=@hid) AHOL hotel_id=@hid
    -- Számold ki a hotel teljes szobájának átlagos napi árát
    FRISSÍTÉS ##temp_result ÁLLÍTSA be sumavgpric=(sumpric/@roomnum/@days) AHOL hotel_id=@hid

    HOZD a következő my_cursor-ből @hid-be – menj a következő kurzorhoz, nincs deadloop.
VÉGE  
Zárd my_cursor – zárd le a kurzort
Deallocate my_cursor - engedd el a kurzort


-- Hozzáadjuk a szálloda nevét és szobatípusának nevét az ideiglenes asztalhoz
FRISSÍTÉS ##temp_result ÁLLÍTSD hotel_name=(VÁLASZD ht.hotel_name From dbo.hotel ht WHERE ht.hotel_id=##temp_result.hotel_id),
room_name=(VÁLASSZ rt.room_name dbo.room_type RT-BŐL, AHOL rt.room_id=##temp_result.room_id)


-- Nézd meg az eredményeket az eredménytáblázatból
VÁLASSZ * A ## KÖZÜL temp_result




-- Ideiglenes táblák tisztításának vége
IF LÉTEZIK(válassz * a tempdb.dbo.sysobjects között, ahol id = object_id(N'tempdb.. ##temp_hotel') és type='U')
KEZDJÜK
    Dobóasztal ##temp_hotel
VÉGE
IF LÉTEZIK(válassz * a tempdb.dbo.sysobjects között, ahol id = object_id(N'tempdb.. ##temp_room') és type='U')
KEZDJÜK
    Dobd le az asztalt ##temp_room
VÉGE
IF LÉTEZIK(válassz * a tempdb.dbo.sysobjects között, ahol id = object_id(N'tempdb.. ##temp_result') és type='U')
KEZDJÜK
    Dobd le az asztalt ##temp_result
VÉGE

Pontszám

A résztvevők száma1MB+1 hozzájárul+1 Összeomlás ok
Admin + 1 + 1 Lelkes vagyok mások segítéséért!

Minden értékelés megtekintése

 Háziúr| Közzétéve 2018. 12. 06. 14:11:48 |
xzxmustwin Közzétéve: 2018-12-6, 11:58
Őszintén szólva, ennek a táblázatnak a szerkezete kissé ésszerűtlen

Az emmmm adatbázis tanár által adott házi feladatok valóban ésszerűtlenek lehetnek, és nem láttam volna, ha nem tanultam meg nagyon jól...
Azonban a kulcs továbbra is a problémamegoldó ötletek, szeretném megkérdezni a barátaimat, van-e valamilyen javaslatotok?
 Háziúr| Közzétéve 2018. 12. 06. 14:09:20 |
LZZSF közzétette: 2018-12-06, 09:07
A MySQL elavult, nincs kliense, add ide a SQL Server szkriptjét

Bocsánat, még nem használtam SQL Severt, talán csak azért, mert csak tanítás, ezért a tanár megkért minket, hogy a mysql-t használjuk. Ha a barátaid hajlandóak megosztani az ötleteiket, nagyon köszönöm.
Közzétéve 2018. 12. 05. 21:57:13 |
Elmegyek a QQ csoporthoz, hogy 10 jüan jutalmat ajánls, hátha valaki tud-e nemet mondani
Közzétéve 2018. 12. 06. 7:56:39 |
Segítség
Közzétéve 2018. 12. 06. 9:07:08 |
A MySQL elavult, nincs kliense, add ide a SQL Server szkriptjét

Pontszám

A résztvevők száma1MB+1 hozzájárul+1 Összeomlás ok
Admin + 1 + 1 Lelkesedett!

Minden értékelés megtekintése

Közzétéve 2018. 12. 06. 11:24:25 |
LZZSF közzétette: 2018-12-06, 09:07
A MySQL elavult, nincs kliense, add ide a SQL Server szkriptjét

Ajánlott beszélni az ötletről, és hagyni, hogy a bérbeadó használja referenciaként, ami szintén lehetséges
Közzétéve 2018. 12. 06. 11:58:37 |
Őszintén szólva, ennek a táblázatnak a szerkezete kissé ésszerűtlen

Pontszám

A résztvevők száma1MB+1 hozzájárul+1 Összeomlás ok
Admin + 1 + 1 Lelkesedett!

Minden értékelés megtekintése

 Háziúr| Közzétéve 2018. 12. 06. 14:07:29 |
Megjelent: 2018-12-5 21:57
Elmegyek a QQ csoporthoz, hogy 10 jüan jutalmat ajánls, hátha valaki tud-e nemet mondani

Köszönöm, ha valaki válaszol, elküldöm neked a piros borítékot :)
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com