Postgresql COUNT()在不同的复合PK上

时间:2013-10-30 08:08:51

标签: sql postgresql

有没有办法在与Postgres的独特复合PK上调用 count ?我收到以下错误,不知道为什么。

SQL: SQLSTATE[42883]: Undefined function: 7 ERROR: function count(character varying, integer) does not exist LINE 1: SELECT COUNT(DISTINCT "t".id, "t".library_id) FROM "ab_colle... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.

感谢任何帮助或建议。

编辑:

查询:

SELECT COUNT(DISTINCT "t".id, "t".library_id) 
  FROM "ab_collection" "t" 
 WHERE t.library_id=1

编辑:

我还应该注意,这是一个生成此代码的核心框架(Yii)方法,我无法对其进行编辑,但在尝试找到解决方法之前,我需要确定是否做错了。

3 个答案:

答案 0 :(得分:3)

SELECT COUNT(DISTINCT ROW("t".id, "t".library_id))
  FROM "ab_collection" "t" 
 WHERE t.library_id=1

从这里https://github.com/yiisoft/yii/issues/3004#issuecomment-27601733

答案 1 :(得分:2)

我认为你不能使用COUNT(col1, col2,...)。这需要两个单独的COUNT(col1), COUNT(col2)。因此我认为它不会对复合键起作用。

  

... count(字符变化,整数)不存在...

告诉你只是你不能使用该函数,因为它是无效的(虽然语法是正确的)

但是既然你正在使用复合PK,那么

SELECT COUNT(*) from table WHERE pk1 = XXX AND pk2 = YYY;

答案 2 :(得分:2)

您可以连接两列

SELECT COUNT(DISTINCT ("t".id||' '||"t".library_id)) 
  FROM "ab_collection" "t" 
 WHERE t.library_id=1