我在制定 SQL 语句以返回我想要的值时遇到问题。我需要根据用户 ID、第二列的值和第三列的值选择数据,其中该列中的值出现多次。所有列都在同一个表中。
这是我的查询现在的大致轮廓,但最后一个 AND 语句显然只是为了让您了解我想要什么。可以缩小结果范围的 COUNT 语句可能对我不起作用。
SELECT *
FROM table
WHERE user_id = 123
AND second_id = 1
AND third_id having COUNT(1) > 1;
如果您只需要列 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