当前位置: 首页 > 知识库问答 >
问题:

计算可变(大)列数的标志

熊哲圣
2023-03-14

我有一张这样的桌子:http://i.stack.imgur.com/EyKt3.png

我想要这样的结果:

Conditon    COL
ted1        4
ted2        1
ted3        2

即,计数的数量'1'仅在这种情况下。

我想知道总编号。只有 1(检查表格),忽略 0。这就像如果条件为真 (1) 然后计数 1。

还要考虑:如果有很多列怎么办?我想避免为每个表达式键入表达式,例如在本例中为 ted1ted80

共有3个答案

陆弘光
2023-03-14

在PostgreSQL(使用9.4版测试)中,您可以在LATERAL子查询中使用VALUES表达式解轴。您需要动态SQL。

这适用于具有与任何模式匹配的任意列数的任何表,只要所选列都是数字或全部布尔值。仅计算值 1true)。

创建此函数一次:

CREATE OR REPLACE FUNCTION f_tagcount(_tbl regclass, col_pattern text)
  RETURNS TABLE (tag text, tag_ct bigint)
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY EXECUTE (
   SELECT
     'SELECT l.tag, count(l.val::int = 1 OR NULL)
      FROM ' || _tbl || ', LATERAL (VALUES '
       || string_agg( format('(%1$L, %1$I)', attname), ', ')
       || ') l(tag, val)
      GROUP  BY 1
      ORDER  BY 1'
   FROM   pg_catalog.pg_attribute
   WHERE  attrelid = _tbl
   AND    attname LIKE col_pattern
   AND    attnum > 0
   AND    NOT attisdropped
   );
END
$func$;

打电话:

SELECT * FROM f_tagcount('tbl', 'ted%');

结果:

tag  | tag_ct
-----+-------
ted1 | 4
ted2 | 1
ted3 | 2

第一个参数是一个有效的表名,可能是架构限定的。防止SQL注入是内置在数据类型regclass中的。

第二个参数是列名的<code>LIKE</code>模式。因此通配符%

数据库

相关:

    < li >在PostgreSQL中选择具有特定列名的列 < li >在多列上选择DISTINCT
松和璧
2023-03-14

试试这个

select 
sum(case when ted1=1 then 1 else 0 end) as ted1,
sum(case when ted2=1 then 1 else 0 end) as ted2,
sum(case when ted3=1 then 1 else 0 end) as ted3
from table
胥承
2023-03-14

使用 proc 手段是最有效的方法:

proc means data=have noprint;
var ted:; *captures anything that starts with Ted;
output out=want sum =;
run;

proc print data=want;
run;
 类似资料:
  • 问题内容: 我的表中的一列中包含大量BLOB数据。我正在编写一个实用程序以将数据转储到文件系统。但是在转储之前,我需要检查磁盘上是否有必要的空间来导出整个表中的所有Blob字段。 请提出一种有效的方法来获取表中所有Blob字段的大小。 问题答案: 您可以使用MySQL函数。有关更多详细信息,请参见此处。

  • 问题内容: 我试图弄清楚如何确定数据库中特定列的大小,例如,我有两列称为sourceip,destinationip的列,它们都是16字节字段。 我以为这将是在information_schema或\ d +中的某个位置,但是我找不到用于隔离每种列类型的大小的特定命令。 您可以在数据库中计算列类型的大小,还是只需要在Postgresql文档中引用每种类型的字节大小? 问题答案: pg中只有少数类型

  • 问题内容: 我通常使用大约20 Gb大小的文本文件,并且发现自己经常对给定文件中的行数进行计数。 我现在做的只是,而且需要很长时间。有什么解决方案会更快吗? 我在安装了Hadoop的高性能集群中工作。我想知道地图缩小方法是否可以提供帮助。 我希望解决方案像解决方案一样简单,只需一条生产线,但不确定其可行性。 有任何想法吗? 问题答案: 尝试: 猫也是不必要的:用您现在的方式就足够了。

  • 我正在尝试编写一种方法来将数组置换为所有可能的排列。我将每个数组以ArrayList的形式,翻转两个元素,然后将ArrayList返回到ArrayList of ArrayList。如果我在翻转两个元素后将每个数组打印到屏幕上,则按预期进行打印。[1,2,3]前两个元素翻转打印为[2,1,3],但当我将置换的ArrayList添加到另一个ArrayList时,它们都打印为[1,2,3] 代码: 输

  • 我有一张类似“ 我想创建一个新的列,在那里它将计数在最后4列中有值的列数。 我如何在Python中做到这一点? 提前道谢。

  • 我需要帮助写一些代码,计算最大可能的胜利在N游戏的岩石剪刀纸。 给我的是数字N,这是岩石纸剪刀游戏的数量,后面是N组整数(1,2,3),每个都链接到岩石,纸或剪刀。但是,我们不知道哪个数字链接到每个选项。我需要帮助计算第一个人可以赢的最多游戏数。