假设,现在有这么一个表格:
id name value
1 a 123
1 a 231
2 a 123
2 b 321
我现在想要达到的效果是,对 id 和 name 去重。
Output:
1 a 123 or 1 a 231 2 a 123 2 b 321
请问下,这个该怎么实现呢? Distinct 我没有实现,Group By 也是。
假设,现在有这么一个表格:
id name value
1 a 123
1 a 231
2 a 123
2 b 321
我现在想要达到的效果是,对 id 和 name 去重。
Output:
1 a 123 or 1 a 231 2 a 123 2 b 321
请问下,这个该怎么实现呢? Distinct 我没有实现,Group By 也是。
|
talen666Sep 13, 2018
1
别想着一个 SQL 解决,步子迈大了容易扯着蛋
|
|
zarteSep 13, 2018
2
Group By id 和 name 不是就会变成 1a 2a 2b 了么?
|
|
zarteSep 13, 2018
3
加个 count(1) as xx
|
|
vindurrielSep 13, 2018 via iPhone
4
select max(value), id, name from TABLE group by id, name;
|
|
reusSep 13, 2018
5
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 |
|
wqzjk393Sep 13, 2018
6
excel、pandas 有单独对某些字段去重的,选 keepfirst 就行。mysql 好像要子查询加 join 才能实现
|
|
F281M6Dh8DXpD1g2Sep 13, 2018
7
对 id,name 去重以后你的 value 怎么选?
|
|
whypoolSep 13, 2018
8
客户端去重>后端去重
|
|
niaobulashiSep 13, 2018
9
。。。晕,你是依据什么来去重呢,value 没有规则吗
就是单单去重 id 和 name 那么不去重的 value,要么就是 max,要么就是 min 那么答案就是 4 楼了 |
|
wqzjk393Sep 13, 2018
10
oracle 是可以用 over 函数,groupby id name,然后对 value 大小排名,根据需求选择排名第 x 的作为唯一的值。mysql 没有这些只能用 max min 了
|