MYSQL限制特定列值的出现次数

时间:2011-07-11 20:44:49

标签: mysql sql

从数据库中提取一些优惠券。每张优惠券都有一个merchantid列,其中包含优惠券所属商家的ID。

我正在尝试构建一个可以提取5张优惠券的查询,但我只想要每张merchantid一张优惠券。我不希望多张优惠券使用相同的merchantid

2 个答案:

答案 0 :(得分:2)

您可以使用

SELECT * FROM coupons GROUP BY merchantid LIMIT 0,5;

工作,因为

  

MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP BY子句中命名的非聚合列(see docs

如果您不希望MySQL决定保留哪个merchantid,您可以添加条件 (在下面的示例中 - 使用子查询保持商家的点击次数最多):

<强> FIXED:

SELECT c1.* 
FROM coupons c1 JOIN (
    SELECT t.merchantid, MAX(t.numberofclicks) maxnumberofclicks
    FROM coupons t GROUP BY t.merchantid
) c2 ON c1.merchantid = c2.merchantid AND c1.numberofclicks = c2.maxnumberofclicks 
LIMIT 0,5;

还有一种方法(对大型数据集更简洁,可能更快)给猫皮肤涂抹:

SELECT c1.*
FROM coupons c1 JOIN coupons c2 ON c1.merchantid = c2.merchantid
GROUP BY c1.merchantid, c1.numberofclicks
HAVING c1.numberofclicks = MAX(c2.numberofclicks)
LIMIT 0,5;

如果您想要5张优惠券总点击率最高,请在ORDER BY c1.numberofclicks DESC之前添加LIMIT 0,5

答案 1 :(得分:1)

SELECT * FROM your_table_name GROUP BY merchantid LIMIT 0,5; 

这将给出5行具有不同商品的行,但是对于不同的执行,您可能得到相同的结果。如果您想将其随机化,请在'A'内随机'LIMIT A,5'