从数据库中提取一些优惠券。每个优惠券都有一个merchantid
列,其中也包含优惠券所属商家的id。
我正在尝试构造一个查询,该查询提取5张优惠券,但我只希望每个merchantid
有1张优惠券。我不想要具有相同merchantid
的多张优惠券。
发布于 2011-07-12 05:40:35
你可以使用
SELECT * FROM coupons GROUP BY merchantid LIMIT 0,5;
和it 将工作,因为
MySQL扩展了GROUP BY的使用范围,以便选择列表可以引用未在GROUP BY子句(see docs)中指定的非聚集列
如果您不希望MySQL决定保留哪个merchantid
,您可以使用子查询添加您的条件(在下面的示例中-保留点击量最高的商家):
已修复:
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张总点击量最高的优惠券,请在LIMIT 0,5
之前添加ORDER BY c1.numberofclicks DESC
。
发布于 2011-07-12 05:00:10
试一试
SELECT * FROM your_table_name GROUP BY merchantid LIMIT 0,5;
这将给出5行,其中有不同的merchantid,但您可能会在不同的执行中得到相同的结果。如果你想随机化它,在'LIMIT A,5'
中随机化'A'
。
https://stackoverflow.com/questions/6656316
复制相似问题