【问题标题】:Eliminate rows from a result set based on column value occurrence根据列值出现从结果集中消除行
【发布时间】:2020-04-19 13:11:29
【问题描述】:

在执行一个包含许多连接的长 SQL 查询后,我得到一个类似于以下的结果集:

A   B     C     D     E
foo bar   baz   cat   123
dog lorem ipsum dolor 123
bar baz   foo   dog   456
cat amet  bar   baz   789

我想从结果集中删除列值 E 的出现次数小于 2 的行。实际上,它会使最终结果如下所示:

A   B     C     D     E
foo bar   baz   cat   123
dog lorem ipsum dolor 123

我尝试了子查询、GROUP BY 子句、WHERE 表达式和 COUNT() 表达式的变体,但无法转换数据以获得我想要的结果。

我的 SQL 不是最好的。由于各种原因,最好用 SQL 解决这个问题,而不是用 Java 操作结果集。

这样的事情在 SQL 中可能吗?

性能还不是主要问题,因为原始结果集往往很小。

使用 MariaDB 数据库。

【问题讨论】:

  • PRIMARY KEY 是什么?请提供SHOW CREATE TABLE

标签: sql mariadb


【解决方案1】:

一种方法是窗口函数:

select q.*
from (select q.*, count(*) over (partition by e) as cnt
      from <your query here> q
     ) q
where cnt >= 2;

【讨论】:

  • 感谢您的帮助。这很好用,将来会派上用场。
猜你喜欢
  • 1970-01-01
  • 2021-10-21
  • 2016-09-08
  • 2012-10-26
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多