informix 11.5 如何分别统计一个列的成员个数

informix 11.5 How to count the number of members of a column separately

我有一个 table 有这样一列:

table1:

c1 c2  c3 
 . a   .
 . a   .
 . a   .
   a
   b
   b  
   c

如何得到如下结果?:

-- a            b           c
        
 count(a)   count(b)   count(c)

当然还有辅助table像下面这个:

--field table 
d1 d2 
   a
   b
   c

正在将评论转为答案。

如果 table1.c2 中有一个值为 d 的条目,guess/assume 您希望输出的第四列名称为 dd 个值的计数作为值。并且在辅助 table 中也会有一个额外的行。这很棘手。

结果 table 有 N 行,一个对应 table1.c2 列中的每个值,第一列标识值,第二列标识计数:

SELECT c2, COUNT(c2) FROM table1 GROUP BY c2 ORDER BY c2

要生成具有所示名称和计数的单行,需要一个动态构建的 SQL 语句——您编写一个 SQL 语句来生成 SQL(或关键组件SQL) 的第二条语句,您实际执行以获得结果。它是动态的主要原因是结果集中的列数是未知的,直到您 运行 一个确定哪些值存在于 table1.c2 中的查询。那是 non-trivial — 可行,但是 non-trivial.

忘了11.50有没有built-insysmaster:sysdualtable。我通常使用一个常规的 one-column,one-row table 称为 dual。如果您的 Table1.C2 中有值 ae,您可以获得您想要的结果,其中:

SELECT (SELECT COUNT(*) FROM Table1 WHERE c2 = 'a') AS a,
       (SELECT COUNT(*) FROM Table1 WHERE c2 = 'b') AS b,
       (SELECT COUNT(*) FROM Table1 WHERE c2 = 'c') AS c,
       (SELECT COUNT(*) FROM Table1 WHERE c2 = 'd') AS d,
       (SELECT COUNT(*) FROM Table1 WHERE c2 = 'e') AS e
  FROM dual;

这会获取您需要的信息。我不认为它很优雅,但“有效”胜过“无效”。