I have a table where we have barcodes and order numbers, so, I am trying to find all the barcodes that are being assigned to multiple orders.
Example table
barcode | ord_no |
---|---|
1233 | 1 |
1234 | 2 |
1233 | 3 |
1235 | 4 |
1236 | 5 |
1237 | 6 |
1235 | 7 |
1238 | 8 |
expected output
barcode | ord_no |
---|---|
1233 | 1 |
1233 | 3 |
1235 | 4 |
1235 | 7 |
CodePudding user response:
What you should do is to find barcodes you need (b_mult) and then join them to themselves in order to find order numbers
select *
from barcodes b
join (select barcode
from barcodes
group by barcode
having count(1) > 1) b_mult
on b.barcode = b_mult.barcode
an example
CodePudding user response:
Use a window function:
with find_multi as (
select barcode, ord_no,
count(*) over (partition by barcode) as item_cnt
from order_item
)
select barcode, ord_no
from find_multi
where item_cnt > 1;
CodePudding user response:
We count(*)
to find duplicates.
select barcode
,ord_no
from (
select *
,count(*) over(partition by barcode) as cnt
from t
) t
where cnt > 1
order by barcode, ord_no
barcode | ord_no |
---|---|
1233 | 1 |
1233 | 3 |
1235 | 4 |
1235 | 7 |