V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
KeatingSmith
V2EX  ›  问与答

请教: MySQL 查询去重的问题

  •  
  •   KeatingSmith · 2018-09-13 09:23:59 +08:00 · 1343 次点击
    这是一个创建于 2250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设,现在有这么一个表格:

    id name value

    1 a 123

    1 a 231

    2 a 123

    2 b 321

    我现在想要达到的效果是,对 idname 去重。

    Output:

    1 a 123 or 1 a 231 2 a 123 2 b 321

    请问下,这个该怎么实现呢? Distinct 我没有实现,Group By 也是。

    10 条回复    2018-09-13 10:49:21 +08:00
    talen666
        1
    talen666  
       2018-09-13 09:47:17 +08:00
    别想着一个 SQL 解决,步子迈大了容易扯着蛋
    zarte
        2
    zarte  
       2018-09-13 09:58:04 +08:00
    Group By id 和 name 不是就会变成 1a 2a 2b 了么?
    zarte
        3
    zarte  
       2018-09-13 09:59:03 +08:00
    加个 count(1) as xx
    vindurriel
        4
    vindurriel  
       2018-09-13 10:06:22 +08:00 via iPhone
    select max(value), id, name from TABLE group by id, name;
    reus
        5
    reus  
       2018-09-13 10:16:56 +08:00
    SELECT
    DISTINCT ON (id, name)
    *
    FROM table
    ORDER BY value asc/desc

    当然,DISTINCT ON 是 PostgreSQL 才有的,不想换的话,可以参考: https://stackoverflow.com/questions/17673457/converting-select-distinct-on-queries-from-postgresql-to-mysql
    wqzjk393
        6
    wqzjk393  
       2018-09-13 10:30:20 +08:00
    excel、pandas 有单独对某些字段去重的,选 keepfirst 就行。mysql 好像要子查询加 join 才能实现
    liprais
        7
    liprais  
       2018-09-13 10:32:00 +08:00
    对 id,name 去重以后你的 value 怎么选?
    whypool
        8
    whypool  
       2018-09-13 10:37:01 +08:00
    客户端去重>后端去重
    niaobulashi
        9
    niaobulashi  
       2018-09-13 10:38:51 +08:00
    。。。晕,你是依据什么来去重呢,value 没有规则吗
    就是单单去重 id 和 name
    那么不去重的 value,要么就是 max,要么就是 min
    那么答案就是 4 楼了
    wqzjk393
        10
    wqzjk393  
       2018-09-13 10:49:21 +08:00
    oracle 是可以用 over 函数,groupby id name,然后对 value 大小排名,根据需求选择排名第 x 的作为唯一的值。mysql 没有这些只能用 max min 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2711 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:40 · PVG 16:40 · LAX 00:40 · JFK 03:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.