Sql 使用具有不同属性的和

Sql 使用具有不同属性的和,sql,postgresql,Sql,Postgresql,表: 我想要这样的结果 item value a 1 a 1 a 1 b 2 b 2 c 1 c 1 可通过以下命令执行此操作: SUM 4 但是有没有一个简单的命令可以做到这一点? 大概是这样的: SELECT SUM(value) FROM ( SELECT DISTINCT ON (item) * FROM TABLE ) s

表:

我想要这样的结果

 item    value
  a        1
  a        1
  a        1
  b        2
  b        2
  c        1
  c        1 
可通过以下命令执行此操作:

 SUM
  4
但是有没有一个简单的命令可以做到这一点? 大概是这样的:

SELECT SUM(value)
FROM (
    SELECT DISTINCT ON (item) *
    FROM TABLE
) s 

保留一个事实,即如果一个项具有不同的值,则结果集将是错误的,如注释中所指出的,如果要简化它,可以将其存储在一个过程中:

SELECT SUM(value in DISTINCT(item)) FROM TABLE

正确的命令是:

CREATE OR REPLACE FUNCTION sumDiff() RETURNS INTEGER AS $$
        DECLARE
            ress integer;
        BEGIN
            SELECT SUM(value)
            FROM (
                SELECT DISTINCT ON (item) *
                FROM itemvalues
            ) s
            INTO ress;
            RETURN ress;
        END;
$$ LANGUAGE plpgsql;

SELECT sumDiff(); // returns 4
使用DISTINCT ON时,ORDER BY很重要


如果没有子查询,我想不出这样做的方法。通常,这些数据将从另一个查询中构造。在基表上求和可能比在结果上做得更好。提示:数据未标准化。

如果单个项目的值不同,该怎么办?例如,a,1,a,2,a,3,a,4?在我的例子中,项目的值是唯一的,数据是分开的,因为在这个表中我没有画出其他列是不唯一的。你需要两个层次的嵌套,但我认为像从选择项目中选择sumvalue,从项目组中按项目t选择minvalue这样的东西会更有效
SELECT SUM(value)
FROM (SELECT DISTINCT ON (item) *
      FROM TABLE
      ORDER BY item
     ) s ;