SQL 删除某些重复值
SQL remove certain duplicate values
我有这样的结果 table(在查询 运行 之后):
id | time | region
12x-4nm-334 | 16:00 | Utah
12x-4nm-334 | 17:00 | California
12x-4nm-334 | 19:00 | Missouri
12x-4nm-334 | 22:00 | California
983-n2n-aq2 | 8:00 | New York
983-n2n-aq2 | 9:00 | New York
这个table中还有一些其他的列,但重要的是我想从结果中删除只注册到一个区域的id。因此,像“983-n2n-aq2”这样只出现在单个区域(无论时间如何)的 ID 不应该出现在结果 table.
中
希望这个问题够清楚了。
试试这个:
SELECT id, count(DISTINCT region) as RegionCount
FROM table
GROUP BY
id
HAVING count(DISTINCT region) > 1
如果您的 DBMS 不支持 count(distinct )
那么应该这样做:
SELECT id, count(DISTINCT region) as RegionCount
FROM (
SELECT id, region FROM table GROUP BY id, region
) as table
GROUP BY
id
HAVING count(DISTINCT region) > 1
如果你使用MySql
DELETE FROM table
WHERE id IN ( SELECT x.id
FROM ( select *
FROM table t
GROUP BY id
HAVING COUNT(DISTINCT region) = 1
) as x
)
我不知道 Vertica。希望对你有帮助
试试这个(从 Geerkens 先生那里借来的):
SELECT a.*
FROM table a INNER JOIN
(
SELECT id
FROM table
GROUP BY id
HAVING count(DISTINCT region) > 1
) b ON a.id = b.id
首先获取具有多个不同区域的id(如子查询中所示),然后在WHERE
子句中使用它进行过滤。
SELECT id, time, region
FROM mytable
WHERE id IN
(
SELECT id
FROM mytable
GROUP BY id
HAVING count(DISTINCT region) > 1
)
我有这样的结果 table(在查询 运行 之后):
id | time | region
12x-4nm-334 | 16:00 | Utah
12x-4nm-334 | 17:00 | California
12x-4nm-334 | 19:00 | Missouri
12x-4nm-334 | 22:00 | California
983-n2n-aq2 | 8:00 | New York
983-n2n-aq2 | 9:00 | New York
这个table中还有一些其他的列,但重要的是我想从结果中删除只注册到一个区域的id。因此,像“983-n2n-aq2”这样只出现在单个区域(无论时间如何)的 ID 不应该出现在结果 table.
中希望这个问题够清楚了。
试试这个:
SELECT id, count(DISTINCT region) as RegionCount
FROM table
GROUP BY
id
HAVING count(DISTINCT region) > 1
如果您的 DBMS 不支持 count(distinct )
那么应该这样做:
SELECT id, count(DISTINCT region) as RegionCount
FROM (
SELECT id, region FROM table GROUP BY id, region
) as table
GROUP BY
id
HAVING count(DISTINCT region) > 1
如果你使用MySql
DELETE FROM table
WHERE id IN ( SELECT x.id
FROM ( select *
FROM table t
GROUP BY id
HAVING COUNT(DISTINCT region) = 1
) as x
)
我不知道 Vertica。希望对你有帮助
试试这个(从 Geerkens 先生那里借来的):
SELECT a.*
FROM table a INNER JOIN
(
SELECT id
FROM table
GROUP BY id
HAVING count(DISTINCT region) > 1
) b ON a.id = b.id
首先获取具有多个不同区域的id(如子查询中所示),然后在WHERE
子句中使用它进行过滤。
SELECT id, time, region
FROM mytable
WHERE id IN
(
SELECT id
FROM mytable
GROUP BY id
HAVING count(DISTINCT region) > 1
)