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

如何在不分组的情况下查询Power与Price重复的SQL行?

查找Power和Price重复的所有记录(保留全列)

下面提供几种实用的SQL写法,都能满足你保留所有列、不分组的需求:

方法1:窗口函数(推荐)

用窗口函数直接统计每个Power+Price组合的行数,再筛选出重复的组:

SELECT id, Power, Price, Name
FROM (
    SELECT 
        *,
        COUNT(*) OVER (PARTITION BY Power, Price) AS row_count
    FROM your_table_name  -- 替换成你的实际表名
) temp
WHERE row_count > 1;

内层查询通过PARTITION BY Power, Price把相同Power和Price的行归为一组,计算每组的总行数;外层只保留行数大于1的行,就能拿到所有重复的记录,主键id和其他列都完整保留。

方法2:EXISTS子查询

通过子查询检查当前行是否存在其他行有相同的Power和Price:

SELECT id, Power, Price, Name
FROM your_table_name t1
WHERE EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.Power = t1.Power
      AND t2.Price = t1.Price
      AND t2.id != t1.id  -- 排除自身匹配
);

对每一行t1,只要能找到另一行t2(id不同但Power、Price相同),就把t1纳入结果,逻辑直观易懂。

方法3:自连接

把表和自身连接,匹配Power、Price相同但id不同的行,再去重:

SELECT DISTINCT t1.id, t1.Power, t1.Price, t1.Name
FROM your_table_name t1
JOIN your_table_name t2
  ON t1.Power = t2.Power
  AND t1.Price = t2.Price
  AND t1.id != t2.id;

自连接后会产生双向匹配(比如id=1和id=4互相匹配),所以用DISTINCT避免重复输出同一行。

用以上任意一种方法查询你提供的示例数据表,都会得到你期望的结果:

+----+-------+-------+--------+
| id | Power | Price | Name   |
+----+-------+-------+--------+
| 1  | 300W  | $5.00 | Alpha  |
| 4  | 300W  | $5.00 | Charlie|
+----+-------+-------+--------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:02:50