确定Postgres分组集中的总组

西亚伦·托宾

我如何确定使用“ GROUPING SET”时的哪一行

CREATE TABLE sales (
    product TEXT NOT NULL,
    customer TEXT NOT NULL,
    cost NUMERIC NOT NULL 
);

INSERT INTO sales (product, customer, cost)
VALUES ('Igloo', 'John', 5000)
    , ('Igloo', 'John', 5000)
    , ('Donkey', 'John', 1000)
    , ('Donkey', 'Jane', 1000)
    , ('Mortgage', 'John''s Brother, Jim', 1000);

我想总结客户,产品和整体的销售额:

SELECT product, customer, SUM(cost)
FROM sales
GROUP BY GROUPING SETS ((product), (customer), ())
ORDER BY GROUPING(product, customer);

给出以下结果:

product  customer            sum
-------- ------------------- -----
Donkey   (null)              2000
Igloo    (null)              10000
Mortgage (null)              1000
(null)   Jane                1000
(null)   John                11000
(null)   John's Brother, Jim 1000
(null)   (null)              13000

我想添加一is_total列,有什么办法来设置“空”分组GROUPING()理想情况下,我会这样做,但这是无效的:

SELECT product
, customer
, sum(cost)
, GROUPING(()) == 0 AS is_total
FROM sales
GROUP BY GROUPING SETS ((product), (customer), ())
ORDER BY GROUPING(product, customer);

我知道我可以这样做:

SELECT product
, customer
, sum(cost)
, GROUPING(product, customer) = 3 AS is_total
FROM sales
GROUP BY GROUPING SETS ((product), (customer), ())
ORDER BY GROUPING(product, customer);

但是理想情况下我不会,因为我的查询非常复杂并且组是动态创建的。这只是一个简单的例子。

SQLFiddle在这里是否有帮助:http ://sqlfiddle.com/#!17/f5ba5/12

戈登·利诺夫

通常,coalesce()足够:

select coalesce(product, customer, 'Total')

更正式地,您可以使用grouping()

select (case when grouping(product) = 0 then product
             when grouping(customer) = 0 then customer
             else 'Total'
        end) as the_key

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Postgres 间隔总月数

来自分类Dev

我可以对 Memcached 键进行分组,以便我可以刷新一个组,但总 Memcached

来自分类Dev

Redis-群集中的总键

来自分类Dev

Postgres按列分组,并且在组内按最大聚合选择其他列

来自分类Dev

使用Google列表方法确定总页数

来自分类Dev

使用NodeJS确定CSV的总列数

来自分类Dev

按月分组并显示剩余总天数

来自分类Dev

Laravel总交易金额按类别分组

来自分类Dev

确定子组索引

来自分类Dev

LINQ:分组子组

来自分类Dev

分组相同的组

来自分类Dev

组内分组

来自分类Dev

输入组插件会改变输入组的总宽度

来自分类Dev

SQL如何按组中最高排名排序,总组

来自分类Dev

确定点是否在Java中的坐标集中

来自分类Dev

SAS:从数据集中动态确定输入字段

来自分类Dev

如何从地图的值集中确定最大长度?

来自分类Dev

确定点是否在Java中的坐标集中

来自分类Dev

在Postgres按天分组

来自分类Dev

SQL Postgres双重分组

来自分类Dev

Postgres按季度分组

来自分类Dev

Postgres分组错误

来自分类Dev

Postgres按季度分组

来自分类Dev

Postgres 中的分组事件

来自分类Dev

分组顺序整数 postgres

来自分类Dev

Postgres返回分组结果并在另一个查询中基于该组传递结果

来自分类Dev

大型数据集中的选择/投影/分组

来自分类Dev

选择Oracle中分组集中的最新数据

来自分类Dev

从分组数据集中随机分割数据