PostgreSQL 11 发布 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjp

PostgreSQL 11 发布

  •  
  •   zjp 2018 年 10 月 20 日 6040 次点击
    这是一个创建于 2743 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://www.postgresql.org/about/news/1894/

    其实已经发布两天了...这节点真的冷清
    25 条回复    2018-10-23 19:25:21 +08:00
    autotesting
        1
    autotesting  
       2018 年 10 月 20 日
    借问一个问题,如果用 sql 语句先对某几个字段 group_by 了之后,如何取到关于这几个字段分组后,所有其他数据的整体数据呢?
    iappled
        2
    iappled  
       2018 年 10 月 20 日
    @autotesting count sum
    sfqtsh
        3
    sfqtsh  
       2018 年 10 月 20 日 via Android
    rc1 时就已经说会在 18 号发布正式版 11.0 了。
    JackieMe
        4
    JackieMe  
       2018 年 10 月 20 日
    Dedian sid 貌似前几天就已经有了。
    Klingon
        5
    Klingon  
       2018 年 10 月 20 日
    @autotesting 每天看懂你需求,你是要分组聚合还是分窗口,好像你要问的是窗口函数
    autotesting
        6
    autotesting  
       2018 年 10 月 20 日
    @iappled 不是 group by 取 count 或者 sum,而是 count 中的所有对象。
    autotesting
        7
    autotesting  
       2018 年 10 月 20 日
    @Klingon 分组后取到所有此分组的所有对象,而不是仅仅是 count 或者 max min 这样的结果。
    ShareDuck
        8
    ShareDuck  
       2018 年 10 月 20 日
    @autotesting #7 那么你不应该是用 where 就能解决问题了么?为何要用 group by ?
    autotesting
        9
    autotesting  
       2018 年 10 月 20 日
    @ShareDuck 是需要先分组,然后对应的取到每个分组的所有对象,用 where 的话,我应该是先知道查询条件才能 where 吧,我是不是理解的不对?
    zjp
        10
    zjp  
    OP
       2018 年 10 月 20 日 via Android   1
    @autotesting 中文的分组和 SQL 的 group by 含义不一样,group by 后每组只能有一行输出。你要的还是窗口。
    ShareDuck
        11
    ShareDuck  
       2018 年 10 月 20 日
    @autotesting #9 那你的需求应该是先“获取表中某个列有多少个不同值”,这个操作不应该用 group by 吧,用 SELECT DISTINCT,参考 http://www.w3school.com.cn/sql/sql_distinct.asp
    ShareDuck
        12
    ShareDuck  
       2018 年 10 月 20 日
    @autotesting #9
    查了一下“窗口”的资料,10 楼的方案应该是你需要的。
    paodange
        13
    paodange  
       2018 年 10 月 20 日 via Android
    分组后你拿什么跟原数据进行关联呢?如果是唯一 id,那本身就一条记录,没必要分组啊。有一个情况是,在 group by 后面加上 having 筛选一部分数据,然后再通过 id 与原表数据关联。比如查询一个表中,name 字段有相同的整条记录。select * from table a join (select name from table group by name having count(1)>1) b on a.name=b.name
    autotesting
        14
    autotesting  
       2018 年 10 月 21 日
    @paodange 其实是想得到和 python groupby 一样的效果,简单讲,就是
    | ID | COL1 | COL2 |
    --------------------
    | 1 | 0 | 0 |
    | 2 | 0 | 1 |
    | 3 | 1 | 11 |
    | 4 | 1 | 12 |
    | 5 | 1 | 16 |

    比如,我想按 COL1 分组,然后得到的结果是(0,(model1,model2), (1, model3, model4, model5))这样的效果。

    @ShareDuck @zjp @Klingon 可能这样描述会更清楚一点。
    zjp
        15
    zjp  
    OP
       2018 年 10 月 21 日 via Android
    直觉上不可能。关系数据库的单位是元组,也就是行,不能嵌套。结果集也只有行和列属性
    @autotesting
    zjp
        16
    zjp  
    OP
       2018 年 10 月 21 日 via Android
    @autotesting
    @zjp
    你说的是 (0,(model1,model2)), (1, (model3, model4, model5))吧……
    jamblues
        17
    jamblues  
       2018 年 10 月 21 日 via iPhone
    二楼应该是问的典型排行榜问题 在多个分类下如何取出每个排行榜的前 N 条数据
    paodange
        18
    paodange  
       2018 年 10 月 21 日 via Android
    @autotesting 这样的话,把 COL1 查两次,按 COL1 排序不就好了吗? select COL1 as XXX,* from table order by COL1,ID
    hrong
        19
    hrong  
       2018 年 10 月 21 日
    @autotesting 费了半天尽 ,14 楼这样你早点描述不就行了,浪费了人家多少时间。

    这个要用 spark 的 flatmap 之类的函数实现吧。我也不是很精通,抱歉。
    autotesting
        20
    autotesting  
       2018 年 10 月 21 日
    @zjp
    aborigine
        21
    aborigine  
       2018 年 10 月 22 日 via iPad
    MySQL 可以用 group_concat 实现 postgresql 不清楚
    zjp
        22
    zjp  
    OP
       2018 年 10 月 22 日
    @aborigine 新知识。也想过通过函数是可以做到,在 CLI 中输出还没什么问题,但是代码中解析结构集就很麻烦了。看起来还是代码层合并分组合理些
    beginor
        23
    beginor  
       2018 年 10 月 22 日 via Android
    如果 mysql 的 group_concat 能解决的话,可以试试 pg 的 array_agg :

    select col1, array_agg(col2) as col2s from table group by col1
    beginor
        24
    beginor  
       2018 年 10 月 22 日 via Android   1
    @zjp pg 一大特点就是支持数组
    northernlights
        25
    northernlights  
       2018 年 10 月 23 日
    个人的项目一直在用 PostgreSQL+.NET Core+EF Core+Docker
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1482 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 74ms UTC 17:00 PVG 01:00 LAX 10:00 JFK 13:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86