Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-计数,其中聚合>;1._Sql_Aggregate_Informix - Fatal编程技术网

SQL-计数,其中聚合>;1.

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 我如何

假设我有一个客户数据库表,其中包含{id,username,firstname,lastname}

如果我想知道有多少不同名字的实例,我可以这样做:

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;