Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 23250|Jawab: 11

[Edisi Baru] Bagaimana memilih n kamar termurah

[Salin tautan]
Diposting pada 05/12/2018 21.32.38 | | | |
Sekarang ada dua tabel untuk digunakan, room_type dan room_info
Ada 3 hotel dengan ID 1~3. Kemudian setiap hotel memiliki 3 tipe kamar, dengan ID masing-masing 1~9.
room_type berisi nama, ID, dan ID hotel yang sesuai untuk setiap jenis kamar
Yang tersimpan di room_info adalah harga setiap hari, setiap tipe kamar, dan jumlah kamar yang tersisa.
Topik yang ingin saya tanyakan adalah:
Tentukan rentang waktu dan jumlah kamar yang akan dipesan, kueri hotel, pilihan jenis kamar, dan harga rata-rata yang memenuhi persyaratan (waktu, jumlah kamar yang tersisa), dan urutkan berdasarkan harga rata-rata dari terendah ke tertinggi. Hasilnya termasuk hotel, kombinasi dan jumlah kamar tertentu, dan harga rata-rata terendah.
##不要求为同一房型, tetapi harus hotel yang sama, dan Anda dapat mengubah tipe kamar di tengah jalan.
##比如, waktu check-in adalah 2018-11-14~2018-11-15, dan jumlah kamar yang dipesan adalah 5
##返回选择酒店A, 11-14 pilih 4 tipe kamar dengan ID 3, 1 tipe kamar dengan ID 2, 11-15 pilih 3 tipe kamar dengan ID 3, 2 tipe kamar dengan ID 2, dan harga terendah adalah 2000
##老师要求只能用sql语句, implementasi MySQL tidak dapat menggunakan Python, C++, dll
Saya tidak menuliskannya selama sehari, dan saya tidak melihat topik serupa di Internet, jadi saya datang untuk meminta bantuan para dewa, dan saya ingin bertanya bagaimana cara mencapainya, terima kasih ~







Mantan:Berbagi pengalaman yang dilaporkan sendiri oleh kera program PHP
Depan:Politik ujian masuk pascasarjana 2019 Materi sprint Xu Tao dan Xiao Xiurong
Diposting pada 06/12/2018 17.00.58 |
Posting ini terakhir diedit oleh Miaolinsen pada 2018-12-6 17:03

Saya tidak melakukannya dengan mysql, saya melakukannya dengan mssql:


/*
Tentukan rentang waktu dan jumlah kamar yang akan dipesan, kueri hotel, pilihan jenis kamar, dan harga rata-rata yang memenuhi persyaratan (waktu, jumlah kamar yang tersisa), dan urutkan berdasarkan harga rata-rata dari terendah ke tertinggi. Hasilnya termasuk hotel, kombinasi dan jumlah kamar tertentu, dan harga rata-rata terendah.
##不要求为同一房型, tetapi harus hotel yang sama, dan Anda dapat mengubah tipe kamar di tengah jalan. -- Parsing: Artinya tidak perlu mempertimbangkan tipe kamar, hanya jumlah kamar yang dipertimbangkan
##比如, pilih waktu check-in 2018-11-14~2018-11-15, dan jumlah kamar yang dipesan adalah 5 -- Analisis: Hotel harus berada dalam rentang tanggal, dan ada permintaan untuk jumlah kamar setiap hari (jika tidak ada seorang pun pada hari tertentu, itu tidak akan memenuhi standar)
##返回选择酒店A, 11-14 pilih 4 tipe kamar dengan ID 3, 1 tipe kamar dengan ID 2, 11-15 pilih 3 tipe kamar dengan ID 3, 2 tipe kamar dengan ID 2, dan harga terendah adalah 2000 -- Analisis: Hitung harga rata-rata sesuai konfigurasi minimum per hari
##老师要求只能用sql语句, implementasi MySQL, tidak dapat menggunakan Python, C++, dll. */


-- Parameter masuk, rentang tanggal, jumlah kamar yang dibutuhkan
NYATAKAN TANGGAL @sdate = '14-11-2018';
NYATAKAN TANGGAL @edate = '15-11-2018';
NYATAKAN @roomnum INT = 5;


-- Hitung jumlah hari menginap
NYATAKAN @days INT;
ATUR @days = DATEDIFF(HARI, @sdate, @edate)+1;

-- Nomor hotel yang memenuhi rentang tanggal, jumlah kamar
IF EXISTS(pilih * dari tempdb.dbo.sysobjects di mana id = object_id(N'tempdb.. ##temp_hotel') dan ketik='U')
MULAI
    Tabel jatuhkan ##temp_hotel
AKHIR

PILIH ta.hotel_id ke ##temp_hotel DARI
(PILIH ri. [date], rt.hotel_id, SUM(ri.remain) room_num FROM room_info ri LEFT JOIN room_type rt on ri.room_id=rt.room_id where @sdate <= [date] dan [date] <= @edate GROUP BY ri. [tanggal],rt.hotel_id MEMILIKI JUMLAH(sisa) >= 5) ta
KELOMPOKKAN BERDASARKAN ta.hotel_id MEMILIKI COUNT(*) = @days



-- Dihitung sesuai dengan hotel (konfigurasikan tipe kamar minimum per hari)

IF EXISTS(pilih * dari tempdb.dbo.sysobjects di mana id = object_id(N'tempdb.. ##temp_result') dan type='U')
MULAI
    Drop Table ##temp_result
AKHIR
-- Tabel Hasil Sementara Hotel Tanggal Tipe Kamar ID Tipe Kamar Nama Jumlah Kamar Harga Hotel Harian Total Hotel Rata-rata Harian Hotel Harga Hotel Total Hotel Total Harga Harian Hotel Total Harga Harian Hotel Total Harga Kamar Harian
BUAT TABEL ##temp_result(
    hotel_id INT,
    hotel_name varchar(255),
    [tanggal] TANGGAL,
    room_id INT,
    room_name VARCHAR(255),
    room_num INT,
    harga kamar DESIMAL,
    dsumprice DESIMAL,
    davgprice DESIMAL,
    DESIMAL sumprik,
    DESIMAL sumavgprik
)

MENYATAKAN @hid INT; -- ID Hotel
DEKLARASIKAN @infoid INT; -- ID info
--menegaskan bahwa kursor adalah koleksi
DEKLARASIKAN kursor my_cursor untuk (PILIH hotel_id dari ##temp_hotel);
--Buka kursor--
Buka my_cursor
--Mulai Variabel Kursor Perulangan--
ambil berikutnya dari my_cursor ke @hid
sementara @@FETCH_STATUS = 0 -- mengembalikan status kursor terakhir yang dieksekusi oleh pernyataan FETCH --
MULAI      
    -- Berdasarkan ID hotel, tanggal berulang dihargai
    IF EXISTS(pilih * dari tempdb.dbo.sysobjects di mana id = object_id(N'tempdb.. ##temp_room') dan type='U')
    MULAI
        Drop Tabel ##temp_room
    AKHIR

    -- Hotel, berdasarkan tanggal, dengan kamar diurutkan berdasarkan tanggal Harga
    PILIH info_id, [tanggal], harga, tetap, room_id KE ##temp_room DARI dbo.room_info DI MANA @sdate <= [tanggal] dan [tanggal] <= @edate DAN tetap > 0 DAN room_id DI (PILIH rt.room_id DARI dbo.room_type rt WHERE rt.hotel_id=@hid) ORDER BY [date] ASC, harga ASC
   
   
    DEKLARASIKAN @thisrdate TANGGAL = NULL; -- Tanggal
    NYATAKAN @thisrnum INT=0; -- Jumlah kamar yang dipilih pada tanggal saat ini
   
    DEKLARASIKAN @rdate TANGGAL = NULL; -- Tanggal
    DEKLARASIKAN @rmnum INT = 0; -- Jumlah kamar berdasarkan tipe kamar
   
    -- Siklus berdasarkan tanggal
    NYATAKAN @my_cursor2 KURSOR;
    atur @my_cursor2 = KURSOR UNTUK PILIH info_id DARI ##temp_room ORDER BY [date] ASC, harga ASC
    BUKA @my_cursor2;
    AMBIL BERIKUTNYA DARI @my_cursor2 KE @infoid
    SEMENTARA(@@FETCH_STATUS=0)
    MULAI
        --##temp_result
        PILIH @rmnum=remain, @rdate=[tanggal] DARI ##temp_room DI MANA info_id=@infoid
        JIKA (@thisrdate ADALAH NULL ATAU @thisrdate != @rdate)
        MULAI
            CETAK @rdate
            SET @thisrdate = @rdate;
            SET @thisrnum = 0;
        AKHIR
        - Jenis kamar pemilihan bentuk sediaan
        JIKA (@thisrnum <= @roomnum)
        MULAI
            JIKA (@thisrnum + @rmnum > @roomnum)
            MULAI
                -- Jumlah kamar yang perlu Anda gunakan
                SET @rmnum = @roomnum-@thisrnum;
            AKHIR
        AKHIR
        LAIN   
        MULAI
            -- Tidak diperlukan kamar untuk tanggal tersebut
            ATUR @rmnum = 0;
        AKHIR
        
        JIKA (@rmnum > 0)
        MULAI
            -- Tambahkan hasil dengan nomor yang ditentukan
            MASUKKAN KE ##temp_result(hotel_id, hotel_name, [tanggal], room_id, room_name, room_num, harga kamar, dsumprice, davgprice, sumpric, sumavgpric)
            PILIH @hid, '', @thisrdate, room_id, '', @rmnum, price, 0, 0, 0, 0 DARI ##temp_room DI MANA info_id = @infoid
            
            -- Jumlah kamar telah mencapai harga rata-rata yang dihitung
            SET @thisrnum = @thisrnum + @rmnum;
            JIKA (@thisrnum = @roomnum)
            MULAI
                -- Total harga menurut hotel, dihitung untuk tanggal
                PERBARUI ##temp_result ATUR dsumprice=(PILIH SUM(room_num*roomprice) DARI ##temp_result tr DI MANA tr.hotel_id=@hid DAN tr.[ date]=@thisrdate) DI MANA hotel_id=@hid DAN [tanggal]=@thisrdate
                -- Hitung tarif kamar rata-rata berdasarkan hotel, harga total berdasarkan tanggal
                UPDATE ##temp_result SET davgprice=(dsumprice/@roomnum) DI MANA hotel_id=@hid DAN [date]=@thisrdate
            AKHIR
        AKHIR

        AMBIL SELANJUTNYA DARI @my_cursor2 KE @infoid;
    AKHIR   
    dekat @my_cursor2;  --Matikan kursor
    membatalkan alokasi @my_cursor2;   --lepaskan kursor

    -- Berdasarkan hotel, hitung total harga hotel
    PERBARUI ##temp_result ATUR sumpric=(PILIH SUM(room_num*harga kamar) DARI ##temp_result tr DI MANA tr.hotel_id=@hid) DI MANA hotel_id=@hid
    -- Hitung harga harian rata-rata dari total kamar di hotel
    UPDATE ##temp_result ATUR sumavgpric=(sumpric/@roomnum/@days) DI MANA hotel_id=@hid

    AMBIL berikutnya dari my_cursor ke @hid - pergi ke kursor berikutnya, tidak ada deadloop
AKHIR  
tutup my_cursor -- tutup kursor
Batalkan alokasi my_cursor - lepaskan kursor


-- Tambahkan nama hotel dan nama tipe kamar ke tabel sementara
PERBARUI ##temp_result ATUR hotel_name=(PILIH ht.hotel_name DARI dbo.hotel ht DI MANA ht.hotel_id=##temp_result.hotel_id),
room_name=(PILIH rt.room_name DARI dbo.room_type rt DI MANA rt.room_id=##temp_result.room_id)


-- Periksa hasil dari tabel hasil
PILIH * DARI ##temp_result




-- Akhiri pembersihan tabel sementara
IF EXISTS(pilih * dari tempdb.dbo.sysobjects di mana id = object_id(N'tempdb.. ##temp_hotel') dan ketik='U')
MULAI
    Tabel jatuhkan ##temp_hotel
AKHIR
IF EXISTS(pilih * dari tempdb.dbo.sysobjects di mana id = object_id(N'tempdb.. ##temp_room') dan type='U')
MULAI
    Drop Tabel ##temp_room
AKHIR
IF EXISTS(pilih * dari tempdb.dbo.sysobjects di mana id = object_id(N'tempdb.. ##temp_result') dan type='U')
MULAI
    Drop Table ##temp_result
AKHIR

Skor

Jumlah peserta1MB+1 sumbang+1 Roboh alasan
Admin + 1 + 1 Antusias membantu orang lain!

Lihat semua penilaian

 Tuan tanah| Diposting pada 06/12/2018 14.11.48 |
xzxmustwin Dipaparkan pada 2018-12-6 11:58
Sejujurnya, struktur tabel ini agak tidak masuk akal

Pertanyaan pekerjaan rumah yang diberikan oleh guru database emmmm mungkin memang tidak masuk akal, dan saya tidak melihatnya jika saya tidak mempelajarinya dengan baik ...
Namun, kuncinya masih ide pemecahan masalah, saya ingin bertanya kepada teman-teman saya apakah Anda memiliki saran?
 Tuan tanah| Diposting pada 06/12/2018 14.09.20 |
lzzsf Dipaparkan pada 2018-12-6 09:07
MySQL sudah ketinggalan zaman, tidak ada klien, beri saya skrip untuk SQL Server

Maaf, saya belum menggunakan SQL Sever, mungkin karena hanya mengajar, jadi guru meminta kami untuk menggunakan mysql untuk melakukannya. Jika teman-teman Anda bersedia berbagi idenya, terima kasih banyak.
Diposting pada 05/12/2018 21.57.13 |
Saya akan pergi ke grup QQ untuk menawarkan hadiah 10 yuan untuk melihat apakah seseorang dapat membantu Anda menjawab tidak
Diposting pada 06/12/2018 07.56.39 |
Tolong
Diposting pada 06/12/2018 09.07.08 |
MySQL sudah ketinggalan zaman, tidak ada klien, beri saya skrip untuk SQL Server

Skor

Jumlah peserta1MB+1 sumbang+1 Roboh alasan
Admin + 1 + 1 Antusias!

Lihat semua penilaian

Diposting pada 06/12/2018 11.24.25 |
lzzsf Dipaparkan pada 2018-12-6 09:07
MySQL sudah ketinggalan zaman, tidak ada klien, beri saya skrip untuk SQL Server

Disarankan untuk membicarakan ide tersebut dan membiarkan pemilik menggunakannya sebagai referensi, yang juga harus dimungkinkan
Diposting pada 06/12/2018 11.58.37 |
Sejujurnya, struktur tabel ini agak tidak masuk akal

Skor

Jumlah peserta1MB+1 sumbang+1 Roboh alasan
Admin + 1 + 1 Antusias!

Lihat semua penilaian

 Tuan tanah| Diposting pada 06/12/2018 14.07.29 |
Diterbitkan pada 2018-12-5 21:57
Saya akan pergi ke grup QQ untuk menawarkan hadiah 10 yuan untuk melihat apakah seseorang dapat membantu Anda menjawab tidak

Terima kasih, jika ada yang mau menjawab, saya akan mengirimkan amplop merah :)
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com