cari

Rumah  >  Soal Jawab  >  teks badan

Pertanyaan dan formula membentuk keseluruhan jadual, dengan lajur baharu, dengan lajur baharu ialah formula yang melibatkan nilai lajur bersyarat lain

EDIT: Formula hendaklah lajur "nilai" - lajur "nilai" dengan user_id terendah berdasarkan kategori.

Jadi baris 2 akan menjadi 0.04 kerana lajur "nilai" bagi "id_pengguna" terendah untuk kategori "A" ialah 0.01.

Maaf.

Saya ingin mendapatkan semula semua daripada jadual dan menambah lajur lain yang melibatkan formula yang mengandungi maklumat berdasarkan lajur lain. Berikut adalah bentuk asal:

Kategori user_id Nilai
satu 1 0.01
satu 2 0.05
B 4 0.34
B 7 0.27

Lajur baharu mestilah nilai minimum "id_pengguna" bagi setiap lajur "nilai" baris tolak "kategori" . Jadi untuk baris kedua ia akan menjadi (0.05 - 1) kerana kategorinya ialah "A" dan "user_id" terendah bagi "A" ialah 1.

Ada banyak lagi baris dan lajur, ini hanya contoh.

Apakah formula yang akan saya gunakan?

Inilah yang saya miliki setakat ini, hanya untuk dapat menunjukkan bahawa saya mampu mencipta lajur baharu, tetapi tanpa formula yang betul:

CREATE TABLE new_table 
 AS (select * FROM table_1);
 
 ALTER TABLE new_table
 ADD COLUMN `new_column` DECIMAL(3,2)
 GENERATED ALWAYS AS (table_1.value-table_1.value) STORED;
 
 select * from new_table;

Ini jelas memberi saya lajur baharu, tetapi pada 0 (kerana ia menolak dirinya sendiri).

Apakah formula yang betul?

Ini adalah seni bina:

CREATE TABLE table_1 (
  `category` VARCHAR(2),
  `user_id` INT(2), 
  `value` DECIMAL(3,2)
 );
INSERT INTO table_1
(`category`, `user_id`, `value`)
VALUES
('A', 1, 0.01),
('A', 2, 0.05),
('B', 4, 0.34),
('B', 7, 0.27)
;

P粉178894235P粉178894235263 hari yang lalu906

membalas semua(2)saya akan balas

  • P粉302160436

    P粉3021604362024-04-07 16:15:44

    Dalam mysql 5.7 anda boleh menggunakan subquery untuk mencapai matlamat, pandangan kelihatan lebih baik daripada jadual baharu, tetapi memandangkan pilihan adalah sama, anda boleh memilih

    db<>fiddle sini

    balas
    0
  • P粉627027031

    P粉6270270312024-04-07 15:41:34

    mysql> create view new_table as 
      select category, user_id, value, 
        value - min(user_id) over (partition by category) as adjusted_value
      from table_1;
    
    mysql> select * from new_table;
    +----------+---------+-------+----------------+
    | category | user_id | value | adjusted_value |
    +----------+---------+-------+----------------+
    | A        |       1 |  0.01 |          -0.99 |
    | A        |       2 |  0.05 |          -0.95 |
    | B        |       4 |  0.34 |          -3.66 |
    | B        |       7 |  0.27 |          -3.73 |
    +----------+---------+-------+----------------+

    Ini menggunakan fungsi tetingkap, bermakna ia memerlukan MySQL 8.0, iaitu versi MySQL semasa pada 2018.


    Balas ulasan anda: Gunakan lajur value dari user_id terendah dalam kategori:

    mysql> create or replace view new_table as 
      select category, user_id, value, 
        value - first_value(value) over (partition by category order by user_id) as adjusted_value  
      from table_1;
    
    mysql> select * from new_table;
    +----------+---------+-------+----------------+
    | category | user_id | value | adjusted_value |
    +----------+---------+-------+----------------+
    | A        |       1 |  0.01 |           0.00 |
    | A        |       2 |  0.05 |           0.04 |
    | B        |       4 |  0.34 |           0.00 |
    | B        |       7 |  0.27 |          -0.07 |
    +----------+---------+-------+----------------+

    balas
    0
  • Batalbalas