簡體   English   中英

改進SQL查詢以刪除出現N次以上的行

[英]Improve SQL query for removing rows that appear more than N times

有沒有更好的辦法做下面的事情?

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

這樣,您無需更改HAVING。

嘗試這個:
選擇 *
FROM表為
內部聯接(結果為SELECT CONCAT(a,b,c,d),count(*)為c
從表
按結果分組)為CONCAT(a,b,c,d)= r.r上的r
其中c <40

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM