基于一列标准的MySQL多层过滤
在我的表格中,我有一个姓名、电子邮件地址和一个名为“推荐人”的栏。在表格中多次输入用户名和电子邮件以进行竞赛。推荐人栏告诉我参赛者是如何得知比赛的 如何获取参赛者的记录集,以显示推荐人是否是基于一列标准的MySQL多层过滤,mysql,Mysql,在我的表格中,我有一个姓名、电子邮件地址和一个名为“推荐人”的栏。在表格中多次输入用户名和电子邮件以进行竞赛。推荐人栏告诉我参赛者是如何得知比赛的 如何获取参赛者的记录集,以显示推荐人是否是web和/或email,但只为每个人选择一条记录?例如,参赛者可以在电子邮件下输入10次,在网站下输入100次。我要做的是只获取每个记录的一个实例 这是我当前的查询: select * from table_contestants where referrer IN ('email', 'web') GRO
web
和/或email
,但只为每个人选择一条记录?例如,参赛者可以在电子邮件
下输入10次,在网站
下输入100次。我要做的是只获取每个记录的一个实例
这是我当前的查询:
select * from table_contestants
where referrer IN ('email', 'web') GROUP BY email order by referrer;
当然,当我使用groupby
时,它只会给我一个记录实例,不管它是否有email
或web
删除分组BY
将获得所有实例,这是一个很大的问题
我如何编写查询,为同时拥有电子邮件和网络的每个参赛者提供一条记录?只需使用DISTINCT
select distinct(referrer) as user from table_contestants
where referrer IN ('email', 'web') GROUP BY email order by referrer;
根据您的需要,有多种解决方案:
如果您只需要不同的(姓名、电子邮件)对,而不考虑引用者,请使用distinct
关键字:
SELECT DISTINCT name, email FROM tbl
WHERE referer IN ("email", "web");
如果您需要不同的(姓名、电子邮件、推荐人)元组,同样的解决方案也适用:
SELECT DISTINCT name, email, referer FROM tbl
WHERE referer IN ("email", "web");
作为SQL的扩展,MySQL允许在SELECT
子句中引用groupby
子句中未引用的非聚合列。在这种情况下,非聚合列的值不确定(请理解:“是组的值之一”和“结果不可复制”)
因此,如果您需要不同的(名称、电子邮件)对和一个没有首选项的来源,以下查询将与MySQL一起使用:
请参阅以进行比较 在没有任何聚合函数的情况下,使用GROUP BY子句是不合适的。在“普通SQL标准”中,您是对的:select子句中不允许GROUP BY子句中未引用的非聚合列。但是MySQL明确地接受它作为扩展。组中某个值中的值,由服务器决定。
SELECT DISTINCT name, email, referer FROM tbl
WHERE referer IN ("email", "web")
GROUP BY name, email;