mysql 获取每个productId的最小googlePrice

rqdpfwrv  于 12个月前  发布在  Mysql
关注(0)|答案(1)|浏览(101)

我有下一个SQL查询
第一个月
返回下一个结果
Result of the query
我想得到相同的表为每个productId与最小googlePrices
enter image description here
我试过使用group by,有.这样的东西:
select t.productId, MIN(t.googlePrice), t.priceRaw, t.id, t.title from prices t group by t.productId
但这不是我想要的结果。
我需要一个表与记录为每个productId分钟googlePrice。我已经标记了记录,我需要与绿色线。
Result that I need
我解不开这个任务,帮帮忙!

q9yhzks0

q9yhzks01#

你可以使用一个windows函数,按productId分区。根据你的问题,不确定你是否想要一个新的列与min_price,或者更确切地说,只是记录与min价格。下面两个选项。

create table prices (
  id integer, 
  productId integer, 
  title varchar(20), 
  googlePrice integer
  );
  
insert into prices values 
(1, 22222, 'ABC', 20), 
(2, 22222, 'CDE', 50), 
(3, 22222, 'ZZZZ', 10), 
(4, 888, 'DDDD', 5);

字符串

查询#1(如果您只需要另一列并显示所有行)

select *,
 min(googlePrice) over (partition by productId) as min_price
from prices;


| ID| productId|标题|googlePrice|最低价格|
| --|--|--|--|--|
| 4 | 888 |DDDD| 5 | 5 |
| 1 | 22222 |ABC| 20 | 10 |
| 2 | 22222 |CDE| 50 | 10 |
| 3 | 22222 |ZZZZ| 10 | 10 |

查询#2(如果您只想显示最小行)

select *
from (
 select *,
  row_number() over (partition by productId order by googlePrice) as mp
 from prices
  )z
where mp = 1;


| ID| productId|标题|googlePrice| MP|
| --|--|--|--|--|
| 4 | 888 |DDDD| 5 | 1 |
| 3 | 22222 |ZZZZ| 10 | 1 |
View on DB Fiddle

UPDATE如果您的productId最低价格有关系,并且希望显示最低值的ALL,则使用RANK()而不是ROW_NUMBER()

相关问题