与DISTINCT一起使用SUM

时间:2018-06-29 06:54:31

标签: 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 

但是有一个简单的命令可以做到这一点吗? 像这样:

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

2 个答案:

答案 0 :(得分:0)

如果item具有不同的值,那么结果集将是错误的,正如注释中指出的那样,如果要“简化”它,可以将其存储在过程中:

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

答案 1 :(得分:0)

正确的命令是:

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

使用ORDER BYDISTINCT ON很重要。

我想不出没有子查询的方法。通常,可以从另一个查询中构造此类数据。在基表上进行加总可能会更好,而不是结果。提示:数据未规范化。