列表记录由MySQL查询

时间:2012-09-25 09:27:43

标签: mysql group-by sql-order-by limit

我有如下的mysql表:

STORES
store_id, rating
 10023      5
 10024      5
 10025      4
 10026      4

PRODUCTS
product_id, store_id, price
  10023         10023      5.00
  10045         10023     130.00
  10056         10023      10.00
  10057         10024      20.00
  10058         10024      12.00
  10059         10025       7.00


I need MYSQL query to retrieve records as below:
  store_id,  product_id  Price
    10023       10056    5.00
    10023       10023    10.00
    10024       10058    12.00
    10024       10057    20.00
    10025       10059     7.00

根据最高商店评级首先列出记录的最佳SQL查询是什么,然后是最便宜的价格&每个商店限制2个?

1 个答案:

答案 0 :(得分:3)

MySQL没有分析函数来根据一组行(例如oracle)计算聚合值,但是您可以使用变量限制单个查询中每个字段值的行数。我试过这个似乎工作:

SELECT
r.store_id,
r.product_id,
r.price
FROM ( 
      SELECT *
      FROM (
            SELECT *,
            @cnt := if(@store_id = s.store_id, @cnt:= @cnt + 1, 1) AS row_count,
            @store_id:=s.store_id AS a 
            FROM stores AS s 
            LEFT JOIN (SELECT store_id AS sid, product_id, price 
                       FROM products ORDER BY store_id,price ASC) AS p 
            ON s.store_id=p.sid WHERE product_id IS NOT NULL
           ) AS b, (SELECT @store_id:='',@cnt:=0) AS c
      HAVING row_count<=2
      ORDER BY rating DESC,store_id ASC,price ASC
     ) AS r;