我有下面的答案对我来说很好:
现在,我要选择的所有记录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