从数据库中获取一些优惠券。每个优惠券都有一个包含其所属商家id的
我正在尝试构建一个查询来获取5个优惠券,但是我只想要每个
merchantid
列。我正在尝试构建一个查询来获取5个优惠券,但是我只想要每个
merchantid
对应的1个优惠券。我不想要具有相同merchantid
的多个优惠券。SELECT * FROM coupons GROUP BY merchantid LIMIT 0,5;
如果你不想让MySQL决定保留哪个merchantid
,你可以使用子查询添加条件(在下面的示例中-保留点击次数最高的商家):
MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP BY子句中命名的非聚合列(请参阅文档)。
而且它将会奏效,因为:
已修复:
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;
LIMIT 0,5
之前加上ORDER BY c1.numberofclicks DESC
。JOIN tblMerchants ON tblMerchants.merchantid = tblCouopns.merchantid
和 ORDER BY clicks
在 LIMIT
之前。 - lxa尝试
SELECT * FROM your_table_name GROUP BY merchantid LIMIT 0,5;
这将返回5行,其中包含不同的merchantid,但您可能会在不同的执行中获得相同的结果。如果您想要随机化它,请在'LIMIT A,5'
内部随机化'A'
。
*
不是 GROUP BY 子句的一部分,也不是聚合函数的一部分。 - Jacob