我有一张这样的桌子:http://i.stack.imgur.com/EyKt3.png
我想要这样的结果:
Conditon COL
ted1 4
ted2 1
ted3 2
即,计数的数量'1'仅在这种情况下。
我想知道总编号。只有 1(检查表格),忽略 0。这就像如果条件为真 (1) 然后计数 1。
还要考虑:如果有很多列怎么办?我想避免为每个表达式键入表达式,例如在本例中为 ted1
到 ted80
。
在PostgreSQL(使用9.4版测试)中,您可以在LATERAL
子查询中使用VALUES
表达式解轴。您需要动态SQL。
这适用于具有与任何模式匹配的任意列数的任何表,只要所选列都是数字或全部布尔值。仅计算值 1
(true
)。
创建此函数一次:
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>模式。因此通配符%
。
数据库
相关:
试试这个
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
使用 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),每个都链接到岩石,纸或剪刀。但是,我们不知道哪个数字链接到每个选项。我需要帮助计算第一个人可以赢的最多游戏数。