gpt4 book ai didi

MySQL基于一列条件的多层过滤

转载 作者:行者123 更新时间:2023-11-30 01:26:08 24 4
gpt4 key购买 nike

在我的表格中,我有一个姓名、电子邮件地址列表和一个名为“推荐人”的列。用户名和电子邮件会多次输入表中以进行竞赛。推荐人列告诉我参赛者是如何听说比赛的。

如何获取参赛者记录集,显示推荐人是否为网络和/或电子邮件,但只为每个人选择一条记录?例如,参赛者可以在 email 下输入 10 次,在 web 下输入 100 次。我想做的是获取每条记录的一个实例。

这是我当前的查询:

select * from table_contestants 
where referrer IN ('email', 'web') GROUP BY email order by referrer;

当然,当我使用GROUP BY时,它只给我一个记录实例,无论是否发现有emailweb.

删除GROUP BY将为我提供所有实例,这是很多......

如何编写查询来为我提供每个同时拥有电子邮件网络的参赛者的一条记录?

最佳答案

根据您的需要有多种解决方案:

如果您只需要不同的(姓名、电子邮件)对,而不管引用者如何,请使用 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 子句中引用 GROUP BY 子句中未引用的非聚合列。在这种情况下,非聚合列的值是不确定的(理解:“是组的值之一”和“结果是不可重现的”)。

http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html

因此,如果您需要不同的(姓名、电子邮件)对和一个来源且没有偏好,则以下查询将适用于MySQL:

SELECT DISTINCT name, email, referer FROM tbl
WHERE referer IN ("email", "web")
GROUP BY name, email;
<小时/>

参见http://sqlfiddle.com/#!2/85292/5进行比较;

关于MySQL基于一列条件的多层过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17975305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com