簡體   English   中英

Select 其中一個字段的計數大於一

[英]Select where count of one field is greater than one

我想做這樣的事情:

SELECT * 
  FROM db.table 
 WHERE COUNT(someField) > 1

如何在 MySql 中實現這一點?

使用HAVING而不是WHERE子句進行聚合結果比較。

以面值進行查詢:

SELECT * 
  FROM db.table 
HAVING COUNT(someField) > 1

理想情況下,應該在HAVING子句中定義GROUP BY以進行適當的估值,但MySQL確實允許來自GROUP BY的隱藏列 ...

這是為了准備在someField上的唯一約束嗎? 看起來應該是......

SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3

你也可以通過自我加入來做到這一點:

SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk

干得好:

SELECT Field1, COUNT(Field1)
  FROM Table1 
 GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc

單程

SELECT t1.* 
FROM db.table t1
WHERE exists 
      (SELECT *
      FROM db.table t2 
      where t1.pk != t2.pk 
      and t1.someField = t2.someField)

我在Sql中的兩個表之間給出了一個示例:

Select cn.name,ct.name,count(ct.id) totalcity from city ct left join country cn on ct.countryid = cn.id Group By cn.name,ct.name Having totalcity > 2


正如OMG小馬所說,擁有條款就是你所追求的。 但是,如果您希望獲得離散行而不是摘要(“有”創建摘要) - 則無法在單個語句中完成。 在這種情況下,您必須使用兩個語句。

對我來說,沒有一個組只返回空結果。 所以我覺得擁有一個group by for having語句非常重要

沒有<\/strong>

SELECT COL,TOTAL
FROM (SELECT SPORT, COUNT(COL) AS TOTAL FROM db.table GROUP BY SPORT)
WHERE TOTAL > 100 ORDER BY TOTAL 

也許:

SELECT *
FROM [Table]
where field IN (
    select field
    from [Table]
    group by field
    having COUNT(field)>1 )

還應該提到“pk”應該是一個關鍵領域。 自我加入

SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk 

作者Bill Karwin為您提供所有重復的記錄,這就是我想要的。 因為有些人有兩個以上,你可以多次獲得相同的記錄。 我寫了所有到具有相同字段的另一個表,以通過關鍵字段抑制來消除相同的記錄。 我試過了

SELECT * FROM db.table HAVING COUNT(someField) > 1

首先是上面。 從它返回的數據只給出其中一個副本,不到它給你的1/2,但如果這就是你想要的那么計數是好的。

暫無
暫無

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

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