有更好的方法来做以下事情吗?
SELECT *
FROM table
WHERE CONCAT(a, b, c, d) NOT IN
(
SELECT CONCAT(a, b, c, d) AS result
FROM table
GROUP BY result
HAVING COUNT(*) < 40
)
我也试过使用一些连接,但内存不足。我想做的是,如果a,b,c,d重复40次或更多,忽略这些数据,否则返回。最后我将结果输出到CSV。
编辑:示例数据
A |B |C |D
---|---|---|---
123|ABC|ccc|ddd
123|ABC|ccc|ddd
... (40 times)
456|qwe|qqq|www
789|qwe|qqq|www
将返回:
456|qwe|qqq|www
789|qwe|qqq|www
最佳答案
在您的示例中,您有NOT IN
(重复39次或更少的结果),但您希望HAVING COUNT(*) >= 40
您可以尝试:
SELECT tba.*
FROM table tba
INNER JOIN (SELECT a, b, c, d
FROM table
GROUP BY a, b, c, d
HAVING COUNT(*) < 40
) as tbb ON tbb.a = tba.a AND tbb.b = tba.b AND tbb.c = tba.c AND tbb.d = tba.d
这样你就不需要改变了。