显示一个字段中具有非唯一值的行

Wil*_*ard 3 postgresql select window-functions

我熟悉如何聚合行,如这个答案所示:

我还熟悉如何使用 HAVING 子句过滤聚合结果。

我似乎无法理解(因此它会粘住)是如何根据值或比较其他行来过滤行,而不聚合它们。

我知道答案涉及一些有关窗口函数或窗口子句的内容,事实上我以前已经成功完成过。但我似乎并没有记住它是如何运作的;我觉得我错过了一些基本的东西。

举个例子,信息如下:

 fruit_name | some_field 
------------+------------
 apple      |       3.25
 apple      |        6.8
 apple      |        0.7
 orange     |        2.6
 banana     |        3.5
 banana     |       2.49
 cherry     |          1
 grapefruit |        2.6
 grapefruit |        2.7
Run Code Online (Sandbox Code Playgroud)

我想要获取行数(按水果名称)大于 1 的所有行,因此它应该如下所示:

 fruit_name | some_field 
------------+------------
 apple      |       3.25
 apple      |        6.8
 apple      |        0.7
 banana     |        3.5
 banana     |       2.49
 grapefruit |        2.6
 grapefruit |        2.7
Run Code Online (Sandbox Code Playgroud)

执行此操作的正确惯用方法是什么?

(如果可能的话,我想要一个 SQL 标准答案,如果有一种更简单的 Postgres 特定方法来做到这一点,我也想知道。)

Ger*_*lle 6

Select fruit_name, some_value
  From tooty_fruity      
  where fruit_name in (
    Select fruit_name from tooty_fruity
      Group by fruit_name
      having count(*) > 1)
Run Code Online (Sandbox Code Playgroud)