1

我在制定 SQL 语句以返回我想要的值时遇到问题。我需要根据用户 ID、第二列的值和第三列的值选择数据,其中该列中的值出现多次。所有列都在同一个表中。

这是我的查询现在的大致轮廓,但最后一个 AND 语句显然只是为了让您了解我想要什么。可以缩小结果范围的 COUNT 语句可能对我不起作用。

SELECT *
FROM table
WHERE user_id = 123
AND second_id = 1
AND third_id having COUNT(1) > 1;
4

1 回答 1

4

如果您只需要列 user_id、second_id、third_id 然后试试这个:

SELECT user_id, second_id, third_id, COUNT(1) 
FROM table
WHERE user_id = 123
AND second_id = 1
GROUP BY  user_id, second_id, third_id
HAVING   COUNT(1) > 1;

如果您有其他列并且想要获取这些字段,请尝试以下操作(Oracle 9.2 及更高版本):

WITH qry AS
(
    SELECT a.*,
            COUNT(1)  OVER(PARTITION BY user_id, second_id, third_id) rpt_count
FROM table a
WHERE user_id = 123
AND second_id = 1
)
SELECT *
  FROM qry 
    WHERE rpt_count > 1
于 2011-07-27T18:18:09.110 回答