You aren't joining to _Sent using the SubscriberKey, so for each row in your Unsubscribe Survey table, you'll be getting a row for everyone sent the email. The join should look like this:
[Unsubscribe Survey] u INNER JOIN
ON u.JobID = s.JobID
AND u.ListID = s.ListID
AND u.BatchID = s.BatchID
AND u.SubscriberKey = s....
In these situations, it helps to know which fields you do have access to. The SOAP API documentation is where I tend to turn to. In the SOAP API docs for LoginHistory, we see that there is a UserId field, which is a reference to User.
User does contain ProfileId, which is what you're after.
So your query's WHERE clause would look something like WHERE User....
Wrap your conditions in parenthesis to define the order
"query": "SELECT Id, Name FROM Account where (name like 'Microsoft%' OR name like 'kumar%') and Id >= '001000000000000'"
You can use the Not Sent Tracking extract activity in an automation Studio. However, it is not a very well documented feature of Salesforce.
Alternatively, you could also try to subtract the bounces, sent, supressed(if any) from the target data extension and get an approximate count of not sent.