Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于一列标准的MySQL多层过滤_Mysql - Fatal编程技术网

基于一列标准的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;