我有下面的答案对我来说很好:

现在,我要选择的所有记录ext_no仅具有value零,而不是选择“不重复”或“分组依据”。

如何修改这个答案?我尝试使用order by,但是显示错误。任何帮助将不胜感激。提前致谢。

SELECT   ext_no, MAX(value)
FROM     test
GROUP BY ext_no
HAVING   COUNT(*) > 2 AND
         COUNT(*) = COUNT(CASE value WHEN 0 THEN 1 END)

最佳答案

有两种方法可以实现此目的。在WHERE子句中使用几个相关的子查询,或者通过联接到每个MAX(value)值包含COUNT(*)ext_no值的表中:

查询1

SELECT ext_no
FROM test t1
WHERE NOT EXISTS (SELECT *
                  FROM test t2
                  WHERE t2.ext_no = t1.ext_no AND value != 0)
  AND (SELECT COUNT(*)
       FROM test t3
       WHERE t3.ext_no = t1.ext_no) > 2


第一个子查询检查该ext_no除0外没有其他value。第二个子查询检查此ext_no的副本是否多于2个。

查询2

在此查询中,我们在value条件中应用所有条件(ext_no的非零值和JOIN的两个以上副本)。

SELECT t1.ext_no
FROM test t1
JOIN (SELECT ext_no, MAX(value) AS max_value, COUNT(*) AS count
      FROM test
      GROUP BY ext_no) t2
  ON t2.ext_no = t1.ext_no AND t2.max_value = 0 AND t2.count > 2


输出(两个查询)

ext_no
12133
12133
12133
11505
11505
11505
11505


Demo on SQLFiddle

10-08 10:50
查看更多