如何根据数量进行 SQL 查询
How do I do a SQL query based on number of quantity
我有一个 table 包含电子邮件地址和帐号(以及其他数据)。
为了简化起见,我删除了其他数据。
123456, joe@place.com
123457, phil@place.com
123456, jil@place.com
123456, jane@place.com
123458, john@place.com
根据上面的示例,大多数帐户都有多个电子邮件地址。
我需要创建一个查询来告诉我:
- 有多少帐户有 1 个电子邮件地址
- 有多少帐户有 2 个电子邮件地址
...
- 有多少帐户有 10 个电子邮件地址
你可以试试这个:
select accountnumbers, count(*)
from yourtablename
group by accountnumbers
您可以使用
select acc_no, count(*) from your_table group by acc_no
您可以使用条件聚合来获得您想要的结果集:
SELECT COUNT(CASE WHEN cnt = 1 THEN 1 END) AS cnt1,
COUNT(CASE WHEN cnt = 2 THEN 1 END) AS cnt2,
COUNT(CASE WHEN cnt = 3 THEN 1 END) AS cnt3,
....
FROM (
SELECT COUNT(*) AS cnt, accountId
FROM accounts
GROUP BY accountId ) t
cnt1
包含有 1 个电子邮件的帐户 ID 的数量,cnt2
有 2 个电子邮件的帐户 ID 的数量,等等。
内部查询 (q
) 将计算每个帐户有多少个不同的电子邮件地址。然后外部查询将计算每个计数桶中有多少帐户(1、2、3、...)。
SELECT q.email_counter, COUNT(*) AS num_accounts
FROM (SELECT account_number,
COUNT(DISTINCT email_address) AS email_counter
FROM YourTable
GROUP BY account_number) q
GROUP BY q.email_counter;
已经有很好的答案了,但是我只想通过 having 子句答案添加一个组:
declare @intDesiredCount int = 2 --or 3 or 4 or 10
select AccountNumber
, Count(1) as EmailAddressCount
from ContactTable
Group by AccountNumber
having Count(1) = @intDesiredCount
对 post 聚合值进行筛选,在本例中为电子邮件地址的数量。
我有一个 table 包含电子邮件地址和帐号(以及其他数据)。
为了简化起见,我删除了其他数据。
123456, joe@place.com
123457, phil@place.com
123456, jil@place.com
123456, jane@place.com
123458, john@place.com
根据上面的示例,大多数帐户都有多个电子邮件地址。
我需要创建一个查询来告诉我:
- 有多少帐户有 1 个电子邮件地址
- 有多少帐户有 2 个电子邮件地址
... - 有多少帐户有 10 个电子邮件地址
你可以试试这个:
select accountnumbers, count(*)
from yourtablename
group by accountnumbers
您可以使用
select acc_no, count(*) from your_table group by acc_no
您可以使用条件聚合来获得您想要的结果集:
SELECT COUNT(CASE WHEN cnt = 1 THEN 1 END) AS cnt1,
COUNT(CASE WHEN cnt = 2 THEN 1 END) AS cnt2,
COUNT(CASE WHEN cnt = 3 THEN 1 END) AS cnt3,
....
FROM (
SELECT COUNT(*) AS cnt, accountId
FROM accounts
GROUP BY accountId ) t
cnt1
包含有 1 个电子邮件的帐户 ID 的数量,cnt2
有 2 个电子邮件的帐户 ID 的数量,等等。
内部查询 (q
) 将计算每个帐户有多少个不同的电子邮件地址。然后外部查询将计算每个计数桶中有多少帐户(1、2、3、...)。
SELECT q.email_counter, COUNT(*) AS num_accounts
FROM (SELECT account_number,
COUNT(DISTINCT email_address) AS email_counter
FROM YourTable
GROUP BY account_number) q
GROUP BY q.email_counter;
已经有很好的答案了,但是我只想通过 having 子句答案添加一个组:
declare @intDesiredCount int = 2 --or 3 or 4 or 10
select AccountNumber
, Count(1) as EmailAddressCount
from ContactTable
Group by AccountNumber
having Count(1) = @intDesiredCount
对 post 聚合值进行筛选,在本例中为电子邮件地址的数量。