请教: MySQL 查询去重的问题

2018-09-13 09:23:59 +08:00
 KeatingSmith

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

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 也是。

1367 次点击
所在节点    问与答
10 条回复
talen666
2018-09-13 09:47:17 +08:00
别想着一个 SQL 解决,步子迈大了容易扯着蛋
zarte
2018-09-13 09:58:04 +08:00
Group By id 和 name 不是就会变成 1a 2a 2b 了么?
zarte
2018-09-13 09:59:03 +08:00
加个 count(1) as xx
vindurriel
2018-09-13 10:06:22 +08:00
select max(value), id, name from TABLE group by id, name;
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
2018-09-13 10:30:20 +08:00
excel、pandas 有单独对某些字段去重的,选 keepfirst 就行。mysql 好像要子查询加 join 才能实现
liprais
2018-09-13 10:32:00 +08:00
对 id,name 去重以后你的 value 怎么选?
whypool
2018-09-13 10:37:01 +08:00
客户端去重>后端去重
niaobulashi
2018-09-13 10:38:51 +08:00
。。。晕,你是依据什么来去重呢,value 没有规则吗
就是单单去重 id 和 name
那么不去重的 value,要么就是 max,要么就是 min
那么答案就是 4 楼了
wqzjk393
2018-09-13 10:49:21 +08:00
oracle 是可以用 over 函数,groupby id name,然后对 value 大小排名,根据需求选择排名第 x 的作为唯一的值。mysql 没有这些只能用 max min 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/488791

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX