Mysql 聚合函数到该组内的 select 最高价和 select 最低价

Mysql Agregate function to select maximum and then select minimum price within that group

我正在尝试从聚合函数中获取最大值,然后从价格列中获取最小值,该值会在结果中返回。

id | discount | price 
 1 |       60 |   656 
 2 |       60 |   454 
 3 |       60 |   222 
 4 |       30 |   335 
 5 |       30 |   333 
 6 |       10 |   232 

所以在上面 table 中,我想将最低价格与最高折扣分开。 这是我应该看到的结果:

id | discount | price 
 3 |       60 |   222 
 5 |       30 |   333 
 6 |       10 |   232

可以看到,它取了discount=60组,并把最低价-222分开,其他所有折扣组也一样。

有人可以给我 SQL 这个吗,像这样 -

SELECT MAX(discount) AS Maxdisc
     , MIN(price) as MinPrice
     , 
  FROM mytable 
 GROUP 
    BY discount

但是,这并没有分开每组的最低价格。我想我需要将这个 table 加入到它自己中才能实现。此外,table 包含数百万行,因此 sql 需要很快。一室公寓table.

在您的查询中,您不能 group by discount 然后 maximize the discount 值。

这应该可以让您得到想要的结果..

SELECT Max(ID) AS ID, discount, MIN(price) as MinPrice, FROM mytable GROUP BY discount

如果你不需要id,你会这样做:

select discount, min(price) as minprice
from table t
group by discount;

如果您想要该行中的其他列,您可以连接回原来的 table 或使用 substring_index()/group_concat() 技巧:

select substring_index(group_concat(id order by price), ',', 1) as id,
       discount, min(price)
from table t
group by discount;

这并不总是有效,因为如果列中有太多匹配项,group_concat() 的中间结果可能会溢出。这是由系统参数控制的,如果需要可以将其设置得更大。

这个问题在 SO 中的提问和回答非常繁琐。如果算法能更好地发现重复项就好了。无论如何...

SELECT x.* 
  FROM my_table x 
  JOIN 
     ( SELECT discount,MIN(price) min_price FROM my_table GROUP BY discount) y 
    ON y.discount = x.discount 
   AND y.min_price = x.price;