从数据库中提取一些优惠券。每张优惠券都有一个merchantid
包含优惠券所属商家 ID 的列。
我正在尝试构建一个提取 5 张优惠券的查询,但我只想要每张 1 张优惠券merchantid
。我不想要多张相同的优惠券merchantid
.
你可以使用
SELECT * FROM coupons GROUP BY merchantid LIMIT 0,5;
And it will工作是因为
MySQL 扩展了 GROUP BY 的使用,以便选择列表可以引用未在 GROUP BY 子句中命名的非聚合列(see docs http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html)
如果你不想让 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
before LIMIT 0,5
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)