SQL-计数,其中聚合>;1.
假设我有一个客户数据库表,其中包含{id,username,firstname,lastname} 如果我想知道有多少不同名字的实例,我可以这样做:SQL-计数,其中聚合>;1.,sql,aggregate,informix,Sql,Aggregate,Informix,假设我有一个客户数据库表,其中包含{id,username,firstname,lastname} 如果我想知道有多少不同名字的实例,我可以这样做: select firstname, count(*) from Customers group by 2 order by 1; firstname | count(*) ==================== bob | 1 jeff | 2 adam | 5 我如何
select firstname, count(*) from Customers group by 2 order by 1;
firstname | count(*)
====================
bob | 1
jeff | 2
adam | 5
我如何计算多次出现的名字的数量?在伪sql中,它类似于:
select
COUNT(
firstname,
count(*) as num_occurrences
)
from
Customers
group by 2
having num_occurrences > 1;
这可以做到:
select count(username)
from (select username
from Customers
group by username
having count(*) > 1);
你有正确的想法:
SELECT COUNT(*)
FROM (
SELECT firstname
FROM Customers
GROUP BY firstname
HAVING COUNT(*) >= 2
)
子查询统计多次出现的名字。然后你数一数所有的名字。
HAVING
子句允许您按聚合进行筛选。它类似于WHERE
子句,只是您可以使用聚合函数。不需要子查询
尝试:
或者,按最具代表性的名称排序:
SELECT firstname, COUNT(*) AS custcount
FROM Customers
GROUP BY firstname
HAVING COUNT(*) > 1
ORDER BY custcount DESC;
这太复杂了——IniTech的答案更好。我更喜欢这个解决方案,因为数据库只返回我感兴趣的内容。不幸的是,这在Informix中似乎不起作用(那么就不要在SELECT子句中包含该列。如果可能的话,应该避免使用子选择和子查询。这在IDS 11.50中可以使用;在IDS 11.10中可能可以使用;在早期版本的IDS中不可以使用-最近添加了对“FROM子句中的子查询”的支持。@rexem:@IniTech的答案没有回答问题。)on.应该引用的是
用户名
,而不是名字
。它也不提供请求的答案-包含多行用户名的计数。如果INTO TEMP后跟SELECT from TEMP表不算作子查询,您可以这样做-但除此之外…@Jonathon:输出不会是m在不显示计数所适用的用户名的情况下进行判断。@rexem:该问题询问表中具有多个相同用户名条目的客户数量。它本身并不询问用户名,而是询问此类用户名的数量。它是聚合查询的典型聚合,FROM子句中的子查询是最好的回答方法。@IniTech:再次看这个问题,用户名和firstname之间似乎有点混淆。示例查询选择firstname,但假定的查询结果列出了username。注意:问题混淆了username和firstname-此答案使用了“username”,修改后的问题与“firstname”一起出现。
SELECT firstname, COUNT(*) AS custcount
FROM Customers
GROUP BY firstname
HAVING COUNT(*) > 1
ORDER BY custcount DESC;