There is a table called contacts
with columns id, name, address, ph_no
etc.
I need to find out rows with the same name
, if the rows count is more than 1, show those rows.
For example:
Table: contacts
id--------name--------address---------ph_no--------
111 apple U.K 99*******
112 banana U.S 99*******
123 grape INDIA 99*******
143 orange S.AFRICA 99*******
152 grape KENYA 99*******
For the above table I need to get rows with same column name
data like the below:
id--------name--------address---------ph_no--------
123 grape INDIA 99*******
152 grape KENYA 99*******
I need to get the rows based on the name what I given as argument like below example
syntax:
select * from contacts where name='grape' and it's count(*) >1 return those rows.
How can I achieve the solution for above problem.
To find duplicate values in SQL, you must first define your criteria for duplicates and then write the query to support the search. In order to see how many of these names appear more often than others, you could add an additional ORDER BY statement to the end of the query and order by DESC.
Indexes are used to find rows with specific column values quickly.
The GROUP BY Clause SQL is used to group rows with same values. The GROUP BY Clause is used together with the SQL SELECT statement.
As @vc74 suggests analytic functions would work work a lot better here; especially if your data has any volume.
select id, name, address, ph_no ...
from ( select c.*, count(name) over ( partition by name ) as name_ct
from contacts c )
where name_ct > 1
;
EDIT
restricting on specific names the table contacts
should really have an index on name
and the query would look like this:
select id, name, address, ph_no ...
from ( select c.*, count(name) over ( partition by name ) as name_ct
from contacts c
where name = 'grape' )
where name_ct > 1
;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With