下面的答案对我来说很好:
现在,我不想选择distinct或group-by,而是只选择value
为零的所有记录ext_no
。
如何修改此答案?我试着使用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
子句中使用两个相关的子查询,或通过JOINing到包含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
在这个查询中,我们在JOIN
条件中应用所有条件(没有value
的非零值和ext_no
的两个以上副本(。
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
SQLFiddle 演示