为什么在 IN 子句中使用 GROUP BY 会导致查询无法执行?

问题描述 投票:0回答:1
SELECT id, user_id, item_id
FROM questionnaire_answer_old_0
WHERE item_id IN (
    SELECT item_id
    FROM questionnaire_answer_old_0
    GROUP BY user_id, item_id
    HAVING COUNT(user_id) > 1 AND COUNT(item_id) > 1
);

上面提供的代码正常执行子查询。当尝试运行整个查询时会出现此问题,导致没有响应且没有错误消息;它只是显示为“正在进行查询”。从子查询中删除 GROUP BY 可以使查询正常执行。这可能是什么原因?

sql mysql group-by dolphindb
1个回答
0
投票

您可以使用窗口函数,这可能会更有效。

HAVING COUNT(user_id) > 1 AND COUNT(item_id) > 1
可能不会像您想象的那样,因为
COUNT(someValue)
只是计算非空值的数量,而不是不同值的数量。

我试图猜测你的意图,看起来你想获取

item_id
的所有行,其中任何行都是一组
item_id, user_id
的一部分,其中有多行。所以你需要两级分区。

SELECT id, user_id, item_id
FROM (
    SELECT
      *,
      COUNT(CASE WHEN count > 1 THEN 1 END) OVER (PARTITION BY user_id) AS hasCountGtThan1
    FROM (
        SELECT *,
          COUNT(*) OVER (PARTITION BY user_id, item_id) AS count
        FROM questionnaire_answer_old_0 qa
    ) qa
) qa
WHERE hasCountGtThan1 > 0;
© www.soinside.com 2019 - 2024. All rights reserved.