SQL - Select 总数少了一条记录
SQL - Select One less record from total
以下是数据,我想输出每个值少一条记录。
例如有
A总计4个,所以输出应该有3个A
总B为1,所以输出不应该有任何B
C 共有 2 个,所以输出应该有一个 C
总D为1,所以输出不应该有任何D
总F为3,所以输出应该有2个F
+------+
| Data |
+------+
| A |
| A |
| A |
| A |
| B |
| C |
| C |
| D |
| E |
| F |
| F |
| F |
+------+
输出
+------+
| Data |
+------+
| A |
| A |
| A |
| C |
| F |
| F |
+------+
可以使用row_number()
;如果你有一个排序栏就更好了(我假设 id
):
select data
from (select data, row_number() over(partition by data order by id) rn from mytable) t
where rn > 1
如果您没有排序列,那么您可以 order by data
。
使用row_number()
:
select t.data
from (select t.*, row_number() over (partition by data order by data) as seq
from table t
) t
where seq > 1;
使用解析函数:
WITH cte AS (
SELECT Data, COUNT(*) OVER (PARTITION BY Data) cnt,
ROW_NUMBER() OVER (PARTITION BY Data ORDER BY (SELECT NULL)) rn
FROM yourTable
)
SELECT Data
FROM cte
WHERE rn < cnt;
用简单的英语术语来说,上述方法保留其行号(基于某种任意排序)比每个 [=11= 中的记录总数 少 的任何记录] 团体。这意味着结果集中将排除每组一条记录。
以下是数据,我想输出每个值少一条记录。
例如有
A总计4个,所以输出应该有3个A
总B为1,所以输出不应该有任何B
C 共有 2 个,所以输出应该有一个 C
总D为1,所以输出不应该有任何D
总F为3,所以输出应该有2个F
+------+
| Data |
+------+
| A |
| A |
| A |
| A |
| B |
| C |
| C |
| D |
| E |
| F |
| F |
| F |
+------+
输出
+------+
| Data |
+------+
| A |
| A |
| A |
| C |
| F |
| F |
+------+
可以使用row_number()
;如果你有一个排序栏就更好了(我假设 id
):
select data
from (select data, row_number() over(partition by data order by id) rn from mytable) t
where rn > 1
如果您没有排序列,那么您可以 order by data
。
使用row_number()
:
select t.data
from (select t.*, row_number() over (partition by data order by data) as seq
from table t
) t
where seq > 1;
使用解析函数:
WITH cte AS (
SELECT Data, COUNT(*) OVER (PARTITION BY Data) cnt,
ROW_NUMBER() OVER (PARTITION BY Data ORDER BY (SELECT NULL)) rn
FROM yourTable
)
SELECT Data
FROM cte
WHERE rn < cnt;
用简单的英语术语来说,上述方法保留其行号(基于某种任意排序)比每个 [=11= 中的记录总数 少 的任何记录] 团体。这意味着结果集中将排除每组一条记录。