简体   繁体   中英

How to write SQL statement in this case?

For some reason, I'd like to change the database.

It's not possible to change these values manually one by one as there are so much records.

Please advise how to write this SQL, thanks.

From:

 id  percentage    type
  1     6        services
  1     10       testing
  3     8        services
  3     20       testing
  6     61       services
  6     90       testing

To:

id percentage    type
1     10       services
1     10       testing
3     20       services
3     20       testing
6     90       services
6     90       testing

With a correlated query, you can do it like so:

SELECT 
  t1.id,
  (SELECT MAX(t2.percentage) 
   FROM table1 t2 
   WHERE t2.id = t1.id) percentage,
  type
FROM Table1 t1

SQL Fiddle Demo

If you want to select only see Mahmoud Gamal's Answer

But if you want to permanently change the value, Use UPDATE

UPDATE  tableName a
        INNER JOIN
        (
            SELECT id, MAX(percentage) AS maxPercentage
            FROM tableName
            GROUP BY id
        ) b ON a.ID = b.ID
SET a.percentage = b.maxPercentage;

Write a reference table to match the scales between your services and testing values (see example below) and then write an update query based on each row of your reference table:

id  service_val  testing_val
1       6        10
2       8        20
3       61       90

Running a select all on this table and iterating through the results in something like php, python, etc. would allow you to dynamically replace the values in your mysql query. This approach allows for the two values to not have a direct correllation as opposed to other answers (ie: service doesn't have to be a percentage of testing)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM