简体   繁体   中英

How to update the cheapest item owned by someone in postgres?

Let's say I have the following table in Postgres:

fruit

fruit_id   owner_id   fruit_price    notes
-------------------------------------------
   1          5            15         
   2          5            30
   3          5            20
   4          8            10
   5          8            80

I am looking for a way to update the cheapest fruit owned by someone.

That is, I am looking for an operation that would allow me to set the notes column for the cheapest fruit owned by an individual. So this should only ever update one row (updating multiple rows is fine if there are several ties for the smallest value).

For example (psuedocode):

UPDATE fruit SET notes = 'wow cheap' WHERE owner_id = 5 AND fruit_price IS cheapest;

And this would update the first row in the above example data, because fruit_id of 1 is the cheapest fruit owned by user 5 .

One possible way is simply to use a correlated subquery:

update fruit set
  notes = 'some notes'
where owner_id = 5
  and fruit_price = (
    select min(fruit_price) from fruit f2 
    where f2.owner_id = fruit.owner_id
  );

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