从数据库中提取一些优惠券。每张优惠券都有一个merchantid
列,其中包含优惠券所属商家的ID。
我正在尝试构建一个可以提取5张优惠券的查询,但我只想要每张merchantid
一张优惠券。我不希望多张优惠券使用相同的merchantid
。
答案 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'
。