首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MYSQL限制特定列值的出现次数

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

Stack Overflow用户
提问于 2011-07-12 04:44:49
回答 2查看 6.9K关注 0票数 3

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

我正在尝试构造一个查询,该查询提取5张优惠券,但我只希望每个merchantid有1张优惠券。我不想要具有相同merchantid的多张优惠券。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-12 05:40:35

你可以使用

代码语言:javascript
运行
复制
SELECT * FROM coupons GROUP BY merchantid LIMIT 0,5;

和it 工作,因为

MySQL扩展了GROUP BY的使用范围,以便选择列表可以引用未在GROUP BY子句(see docs)中指定的非聚集列

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

已修复:

代码语言:javascript
运行
复制
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;

还有一种方法(更简洁,在大型数据集上可能更快)给猫剥皮:

代码语言:javascript
运行
复制
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

票数 3
EN

Stack Overflow用户

发布于 2011-07-12 05:00:10

试一试

代码语言:javascript
运行
复制
SELECT * FROM your_table_name GROUP BY merchantid LIMIT 0,5; 

这将给出5行,其中有不同的merchantid,但您可能会在不同的执行中得到相同的结果。如果你想随机化它,在'LIMIT A,5'中随机化'A'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6656316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档