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

PostgreSQL 11 发布

  •  
  •   zjp · 2018-10-20 09:52:15 +08:00 · 5443 次点击
    这是一个创建于 2255 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://www.postgresql.org/about/news/1894/

    其实已经发布两天了...这节点真的冷清😂
    25 条回复    2018-10-23 19:25:21 +08:00
    autotesting
        1
    autotesting  
       2018-10-20 10:53:55 +08:00
    借问一个问题,如果用 sql 语句先对某几个字段 group_by 了之后,如何取到关于这几个字段分组后,所有其他数据的整体数据呢?
    iappled
        2
    iappled  
       2018-10-20 10:58:07 +08:00
    @autotesting count sum
    sfqtsh
        3
    sfqtsh  
       2018-10-20 12:21:56 +08:00 via Android
    rc1 时就已经说会在 18 号发布正式版 11.0 了。
    JackieMe
        4
    JackieMe  
       2018-10-20 13:18:32 +08:00
    Dedian sid 貌似前几天就已经有了。
    Klingon
        5
    Klingon  
       2018-10-20 16:10:56 +08:00
    @autotesting 每天看懂你需求,你是要分组聚合还是分窗口,好像你要问的是窗口函数
    autotesting
        6
    autotesting  
       2018-10-20 17:05:40 +08:00
    @iappled 不是 group by 取 count 或者 sum,而是 count 中的所有对象。
    autotesting
        7
    autotesting  
       2018-10-20 17:08:55 +08:00
    @Klingon 分组后取到所有此分组的所有对象,而不是仅仅是 count 或者 max min 这样的结果。
    ShareDuck
        8
    ShareDuck  
       2018-10-20 17:17:19 +08:00
    @autotesting #7 那么你不应该是用 where 就能解决问题了么?为何要用 group by ?
    autotesting
        9
    autotesting  
       2018-10-20 17:20:31 +08:00
    @ShareDuck 是需要先分组,然后对应的取到每个分组的所有对象,用 where 的话,我应该是先知道查询条件才能 where 吧,我是不是理解的不对?
    zjp
        10
    zjp  
    OP
       2018-10-20 17:30:51 +08:00 via Android   ❤️ 1
    @autotesting 中文的分组和 SQL 的 group by 含义不一样,group by 后每组只能有一行输出。你要的还是窗口。
    ShareDuck
        11
    ShareDuck  
       2018-10-20 17:45:57 +08:00
    @autotesting #9 那你的需求应该是先“获取表中某个列有多少个不同值”,这个操作不应该用 group by 吧,用 SELECT DISTINCT,参考 http://www.w3school.com.cn/sql/sql_distinct.asp
    ShareDuck
        12
    ShareDuck  
       2018-10-20 17:49:05 +08:00
    @autotesting #9
    查了一下“窗口”的资料,10 楼的方案应该是你需要的。
    paodange
        13
    paodange  
       2018-10-20 19:27:01 +08:00 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 00:38:58 +08:00
    @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 01:15:51 +08:00 via Android
    直觉上不可能。关系数据库的单位是元组,也就是行,不能嵌套。结果集也只有行和列属性
    @autotesting
    zjp
        16
    zjp  
    OP
       2018-10-21 01:18:21 +08:00 via Android
    @autotesting
    @zjp
    你说的是 (0,(model1,model2)), (1, (model3, model4, model5))吧……
    jamblues
        17
    jamblues  
       2018-10-21 01:38:11 +08:00 via iPhone
    二楼应该是问的典型排行榜问题 在多个分类下如何取出每个排行榜的前 N 条数据
    paodange
        18
    paodange  
       2018-10-21 03:09:43 +08:00 via Android
    @autotesting 这样的话,把 COL1 查两次,按 COL1 排序不就好了吗? select COL1 as XXX,* from table order by COL1,ID
    hrong
        19
    hrong  
       2018-10-21 08:20:24 +08:00
    @autotesting 费了半天尽 ,14 楼这样你早点描述不就行了,浪费了人家多少时间。

    这个要用 spark 的 flatmap 之类的函数实现吧。我也不是很精通,抱歉。
    autotesting
        20
    autotesting  
       2018-10-21 09:09:42 +08:00
    @zjp
    aborigine
        21
    aborigine  
       2018-10-22 00:29:12 +08:00 via iPad
    MySQL 可以用 group_concat 实现 postgresql 不清楚
    zjp
        22
    zjp  
    OP
       2018-10-22 01:04:58 +08:00
    @aborigine 新知识。也想过通过函数是可以做到,在 CLI 中输出还没什么问题,但是代码中解析结构集就很麻烦了。看起来还是代码层合并分组合理些
    beginor
        23
    beginor  
       2018-10-22 06:09:27 +08:00 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 06:11:49 +08:00 via Android   ❤️ 1
    @zjp pg 一大特点就是支持数组
    northernlights
        25
    northernlights  
       2018-10-23 19:25:21 +08:00
    个人的项目一直在用 PostgreSQL+.NET Core+EF Core+Docker
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1143 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:41 · PVG 07:41 · LAX 15:41 · JFK 18:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.