Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tính toán lại một trường trên GROUP

Tôi nghĩ điều này nên làm:

INSERT INTO mapped (f1_new, f2_new, fk_new)
SELECT f1_new, f2_new, fk_new from (
    SELECT f1_new, @f2 := if(f1_new = @prev_f1, @f2+1, 0) f2_new, fk_new, @prev_f1 := f1_new
    FROM (select f1 AS f1_new, CASE WHEN fk IN (100, 200) THEN 'A'
                                    WHEN fk in (300, 400) THEN 'B'
                                    WHEN fk = 500 THEN 'C'
                               END AS fk_new
          FROM origin
          GROUP BY f1_new, fk_new
          ORDER BY f1_new, fk_new) new,
         (SELECT @f2 := NULL, @prev_f1 := NULL) vars
    ) x

FIDDLE




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có cách nào tốt để thực hiện kết xuất SQL của cơ sở dữ liệu MySQL trong DataGrip không?

  2. Tính năng tìm kiếm MySQL và PostgreSQL JSON

  3. sử dụng một biến cho tên bảng trong mysql gerc

  4. Quyền truy cập mysqldbcompare bị từ chối nhưng lệnh mysql hoạt động

  5. Không có kết quả truy vấn nào cho mô hình [App \ Products] Laravel