Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL select rows, where column value is unique (only appears once)

Given the table

| id | Name |
| 01 | Bob  |
| 02 | Chad |
| 03 | Bob  |
| 04 | Tim  |
| 05 | Bob  |

I want to select the name and ID, from rows where the name is unique (only appears once)

This is essentially the same as How to select unique values of a column from table?, but notice that the author doesn't need the id, so that problem can be solved by a GROUP BY name HAVING COUNT(name) = 1

However, I need to extract the entire row (could be tens or hundreds of columns) including the id, where COUNT(name) = 1, but I cannot GROUP BY id, name as every combination of those are unique.

EDIT:

Am using Google BigQuery.

Expected results:

| id | Name |
| 02 | Chad |
| 04 | Tim  |
like image 275
Olsgaard Avatar asked May 31 '26 17:05

Olsgaard


1 Answers

Simply do a GROUP BY. Use HAVING to make sure a name is only there once. Use MIN() to pick the only id for the name.

select min(id), name
from tablename
group by name
having count(*) = 1

Reading the table only once will increase performance! (And don't forget to create an index on (name, id).)

like image 157
jarlh Avatar answered Jun 04 '26 13:06

jarlh



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!