我具有以下SQL表名称'orders':
+--------------+------------+-------------------+------------+
| order_id | item_id | amount | commission |
+--------------+------------+-------------------+------------+
| 111 | 1234 | 23 | 1 |
| 222 | 1234 | 34 | 2 |
| 111 | 2345 | 45 | 3 |
| 111 | 1234 | 23 | 1 |
+--------------+------------+-------------------+------------+
并且我试图仅选择order_id和item_id不相同的行(仅当BOTH具有相同的值时才删除重复的行,我尝试如下使用“ Group_By”:
SELECT * FROM orders GROUP BY order_id,item_id
但是,这将删除order_id的所有重复项和item_id的所有重复项,这是结果:
+--------------+------------+-------------------+------------+
| order_id | item_id | amount | commission |
+--------------+------------+-------------------+------------+
| 111 | 1234 | 23 | 1 |
| 222 | 1234 | 34 | 2 |
+--------------+------------+-------------------+------------+
我也尝试过使用'DISTINCT',但是我需要选择结果中的所有列。
这是预期的结果:
+--------------+------------+-------------------+------------+
| order_id | item_id | amount | commission |
+--------------+------------+-------------------+------------+
| 111 | 1234 | 23 | 1 |
| 222 | 1234 | 34 | 2 |
| 111 | 2345 | 45 | 3 |
+--------------+------------+-------------------+------------+
我希望清楚,谢谢。
您可以使用row_number()
:
select order_id, item_id, amount, commission
from (
select t.*, row_number() over(partition by order_id, item_id order by commission) rn
from mytable t
) t
where rn = 1
使用示例数据,很难准确地找到要查找的partition
和order by
子句,因此您可能需要根据实际用例进行调整。
简单地:
SELECT DISTINCT * FROM orders
[SELECT DISTINCT
应该做你想做的事
SELECT DISTINCT order_id, item_id, amount, commission
FROM orders;
如果您有更多列,但只关心这些列是否重复,则可以使用ROW_NUMBER()
:
SELECT o.*
FROM (SELECT o.*,
ROW_NUMBER() OVER (PARTITION BY order_id, item_id, amount, commission ORDER BY (SELECT NULL)) as seqnum
FROM orders o
) o
WHERE seqnum = 1;
您可以尝试这个。
create table MyTable
(order_id int
, item_id int
, amount int
, commission int)
insert into MyTable values
(111, 1234, 23, 1),
(222, 1234, 34, 2),
(111, 2345, 45, 3),
(111, 1234, 23, 1)
select distinct * from MyTable
实时db<>fiddle演示。