我有一个包含以下示例数据的表:
place_id email
----------------------------
3 uno@uno.com
3 dos@dos.com
4 tres@tres.com
5 uno@uno.com
6 uno@uno.com
3 dos@dos.com
4 tres@tres.com
我想显示不同位置的电子邮件,我尝试了以下查询:
select email, count(email)
from table
group by email
having count(email) > 1
问题是,这将在同一位置显示重复的行,而我只需要在不同的位置显示行。例如“仅显示电子邮件”uno@uno.com,即在3、5和6处dos@dos.com“这在同一个地方重复。
谢谢。
4条答案
按热度按时间laik7k3q1#
你可以用简单的
GROUP BY
带的子句HAVING
子句来过滤出唯一的地方eqqqjvef2#
你可以用开窗的
COUNT(*)
支持现代rdbms。dbfiddle演示
sql服务器/mariadb/mysql 8.0/postgresql:
db-fiddle.com演示
xn1cxnb43#
非常感谢,我尝试了gordon linoff的第一个解决方案,结果成功了。但是我有一个小问题,我有一个“where”子句,这个:
显示与以下相同的结果:
因为这是一个or条件,但我不知道如何修复,在第一个查询中,如何只显示所有这些地方的项,而不是其中两个。
lfapxunr4#
如果您只需要电子邮件,可以使用聚合:
如果您希望这些位置也位于唯一列表中,可以执行以下操作:
而且,虽然可以使用窗口函数,但解决方案并不那么明显: