You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MySQL过滤无差异问卷响应以进行多元线性回归

解决MySQL中过滤无响应差异问卷记录的问题

方法一:子查询筛选有效ID

核心逻辑是先找出同一ID下x1、x2、x3存在不同取值组合的ID,再提取这些ID对应的所有记录。假设你的表名为questionnaire,执行以下SQL:

SELECT t.*
FROM questionnaire t
JOIN (
    SELECT ID
    FROM questionnaire
    GROUP BY ID
    HAVING COUNT(DISTINCT CONCAT(x1, '|', x2, '|', x3)) > 1
) valid_ids ON t.ID = valid_ids.ID;

代码说明

  • 子查询部分:按ID分组后,用COUNT(DISTINCT CONCAT(...))统计每个ID下x1/x2/x3的唯一组合数。组合数大于1,说明该ID的响应存在差异,属于需要保留的有效ID。
  • 主查询通过JOIN关联原表,只保留有效ID的所有记录。

方法二:窗口函数实现(MySQL 8.0+适用)

你的MySQL版本是8.0.30,完全支持窗口函数,写法更简洁:

SELECT ID, x1, x2, x3 -- 可添加你需要的其他字段
FROM (
    SELECT *,
           COUNT(DISTINCT CONCAT(x1, '|', x2, '|', x3)) OVER (PARTITION BY ID) AS combo_count
    FROM questionnaire
) t
WHERE combo_count > 1;

代码说明

  • 窗口函数COUNT(DISTINCT ...) OVER (PARTITION BY ID)会给每条记录标记其所属ID的x1/x2/x3唯一组合数。
  • 外层查询筛选出组合数大于1的记录,直接得到有响应差异的ID的所有行。

额外提示

  • 如果x1/x2/x3字段可能包含|,换一个不会出现在字段值里的分隔符(比如#),避免拼接后误判。
  • 若字段是数值类型,MySQL 8.0.19+支持多列DISTINCT统计,可简化代码:
    SELECT t.*
    FROM questionnaire t
    JOIN (
        SELECT ID
        FROM questionnaire
        GROUP BY ID
        HAVING COUNT(DISTINCT (x1, x2, x3)) > 1
    ) valid_ids ON t.ID = valid_ids.ID;
    

内容的提问来源于stack exchange,提问作者Emilia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:05:22