簡體   English   中英

訪問按兩個字段分組的SQL COUNT條記錄

[英]Access SQL COUNT records grouped by two fields

表格1

ID1  LETTER
1    A
1    B
2    R
2    S
2    T
3    Z

表2

ID1  NAME
1    Pete
2    Andy
3    Mary

Access中的SQL命令:

SELECT name, letter
FROM table1 
INNER JOIN table2 ON table1.ID1 = table2.ID1
GROUP BY name, letter
HAVING COUNT(*) > 2;

最終,我創建了一個查詢,生成了以下內容:

NAME  LETTER
Pete  A
Pete  B
Andy  R
Andy  S
Andy  T
Mary  Z

我正在嘗試產生僅給那些擁有兩個以上條目的個人以及相關字母的輸出。 因此,如下所示:

NAME  FIELD
Andy  R
Andy  S
Andy  T

但是,當我按名稱AND字段分組時,每個唯一組合的計數僅為1,因此SQL在運行時不輸出任何條目。

如果我嘗試僅使用GROUP BY名稱,則會像我一樣大喊,我的查詢沒有將指定的表達式“ letter”作為聚合函數的一部分。

一種方法是僅對第一個表中的id進行聚合並將其加入:

SELECT table2.name, table1.letter
FROM (table1 INNER JOIN
      table2 
      ON table1.ID1 = t2.ID1
     ) INNER JOIN
     (SELECT id1, COUNT(*) as cnt
      FROM table1
      GROUP BY id1
     ) as t1cnt
     ON t1.ID1 = t1cnt.ID1
WHERE t1cnt.cnt > 2

使用CTE並將其分組,然后再加入以獲取字母值,如下所示:

with CTE(name, ID1)
as(
SELECT name, table1.ID1 FROM table1 INNER JOIN table2 ON table1.ID1 = table2.ID1       GROUP BY name HAVING COUNT( * ) > 2
)
SELECT name, letter
FROM cte
INNER JOIN table2 ON cte.ID1 = table2.ID1

這樣的事情應該起作用:

select name, letter
from table1
  inner join table2 on table1.id = table2.id
  inner join
    (select id
     from table1
     group by id
     having count(*) > 2) as t1 on t1.id = table1.id;

暫無
暫無

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

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