簡體   English   中英

SQL查詢未通過Have子句在組中返回期望的結果

[英]SQL query not returning desired result in group by having clause

我有一張帶有member_information及其引薦代理的表格。 我想運行一個查詢,該查詢返回表中所有信息的信息(選擇*),其中代理出現3次以上。

我最初的查詢是:

SELECT agent FROM activity GROUP BY agent ASC HAVING COUNT(agent) > 3;

這將返回所需的業務代表ID,但不會返回“活動”中的其余數據。

我修改為:

SELECT * FROM activity GROUP BY agent ASC HAVING COUNT(agent) > 3

這僅針對所需的每個業務代表號返回結果之一,而不是所有具有匹配業務代表號的行。

我想念什么?

編輯

假設表結構如下:

id     |     agent     |     name     |     address 
--------------------------------------------------------
1      |      1        |     (name)   |     (an address)
2      |      1        |     (name)   |     (an address)
3      |      2        |     (name)   |     (an address)
4      |      3        |     (name)   |     (an address)
5      |      3        |     (name)   |     (an address)
6      |      3        |     (name)   |     (an address)
7      |      1        |     (name)   |     (an address)
8      |      2        |     (name)   |     (an address)
9      |      4        |     (name)   |     (an address)

查詢結果應返回:

id     |     agent     |     name     |     address 
--------------------------------------------------------
1      |      1        |     (name)   |     (an address)
2      |      1        |     (name)   |     (an address)
4      |      3        |     (name)   |     (an address)
5      |      3        |     (name)   |     (an address)
6      |      3        |     (name)   |     (an address)
7      |      1        |     (name)   |     (an address)

采用:

SELECT x.*
  FROM ACTIVITY x
  JOIN (SELECT t.agent 
          FROM ACTIVITY t 
      GROUP BY t.agent 
        HAVING COUNT(t.agent) > 3) y ON y.agent = x.agent

分組時,組中的所有行都壓縮為一個。 根據您要執行的操作,您需要使用適當的組函數(SUM,GROUP_CONCAT等),或者可以執行我認為要使用子查詢執行的操作:

SELECT * FROM activity WHERE agent IN (select agent from activity group by agent asc having count(agent) > 3);

暫無
暫無

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

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