首页 > 解决方案 > 如何在不分组的情况下进行选择以过滤掉重复项?我希望它们都单独显示?

问题描述

我在数据库中有一些数据被分类到一个文本列中,每个文本项的单独标识符和每个文本列的语言。

 SELECT Text, Language, COUNT(*)
 FROM TableA
 WHERE Language = 'English'
 GROUP BY Text, Language 
 HAVING COUNT(*) > 1 

此查询为我提供了我需要的数据列表,但是我有 2 个问题,它被分组,因此结果显示为:

|    Text    | Language | Amount Counted  |
|------------|----------|-----------------|
| Hello Text | English  |               5 |

问题是我可以根据文本进行排序以进行计数,但是我无法弄清楚如何在其中添加唯一标识符并将它们列为一个大列表?例如,文本“你好”可能在列表中出现 5 次,我会得到如上所示的内容。但是每个版本的 hello 可能会有不同的 ID 值 Hello 的第一个版本是 (ID 232) 而第二个版本是 (ID 546) 我如何添加同一个表中的 ID 值并列出所有重复的他们的 ID 值?

所以我会得到作为一个例子:

|      Text      | Language | ID   |
|----------------|----------|------|
| Hello Text     | English  |  232 |
| Hello Text     | English  |  546 |
| Hello Text     | English  |  643 |
| Hello Text     | English  |  745 |
| Hello Text     | English  | 1353 |
| Other Text     | English  |  343 |
| Other Text     | English  |  433 |
| Different Text | English  |  433 |
| Different Text | English  |  437 |
| Different Text | English  |  563 |
| Different Text | English  |  898 |

标签: sql

解决方案


你只想要一个窗口功能吗?

SELECT text, language, id
FROM (SELECT a.*, COUNT(*) OVER (PARTITION BY Text) as cnt
      FROM TableA a
      WHERE Language = 'English'
     ) a
WHERE cnt > 1
ORDER BY id;

推荐阅读