每组最多3个结果(商店及其价格)

时间:2014-03-03 14:14:24

标签: mysql group-by min

我必须从包含

之类的表中获取
ShopId  ArticleId  Price  ArticleName

  1        1a      2.00   Fahrrad
  1        1b      3.00   Fahrrad
  1        1c      4.00   Fahrrad
  1        1d      9.99   Fahrrad
  2        2a      2.00   Fahrrad
  2        2b      3.10   Fahrrad
  2        2c      3.50   Fahrrad
  2        2d      9.99   Fahrrad

最大。 3 ArticleId每个ShopId由min命令。结果价格,例如:

ShopId  ArticleId  Price  ArticleName

  1        1a      2.00   Fahrrad
  1        1b      3.00   Fahrrad
  1        1c      4.00   Fahrrad
  2        2a      2.00   Fahrrad
  2        2b      3.10   Fahrrad
  2        2c      3.50   Fahrrad

有人可以帮忙吗? 所以它类似于min(Price)和group by ShopId,但有3个结果不是1。

2 个答案:

答案 0 :(得分:0)

给这个打击。不知道你的桌子的名字,所以我称之为shopArticle

select t.ShopId,t.ArticleId,t.Price,t.ArticleName
from
(
select sa.*,
            CASE sa.ShopId 
            WHEN @curShopId
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curShopId := sa.ShopId END rank
from shopArticle sa
join (SELECT @curRow := 0, @curShopId := '') r
order by sa.ShopId,sa.Price asc
) t
where t.rank <=3;

答案 1 :(得分:0)

使用真实的列名称,结果为简短形式: 设置@cr:= 0,@ cs:=“”;

选择sShopTitlep。*, @cr:= if(@cs = pShopId,@ cr + 1,1)为cr, @cs:= pShopIdcs

来自affili_products2 p强制索引(PRIMARY) 在affili_shops s = pShopId

左加入s ShopId

其中pKeywords喜欢“%hobby%”

p分组。ShopIdpPrice cr <= 3 按s订购。ShopTitle asc,pPrice asc