表格:
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
答案 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 BY
时DISTINCT ON
很重要。
我想不出没有子查询的方法。通常,可以从另一个查询中构造此类数据。在基表上进行加总可能会更好,而不是结果。提示:数据未规范化。