MySQL查询GROUP BY或DISTINCT的对立面



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

现在,我不想选择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 演示

最新更新