--subqueries Use CommunityAssist Select PersonKey, max(DonationAmount) From Donation Group by Personkey --which donor gave the largest donor Select Lastname, Firstname, DonationAmount From Donation d inner Join Person p On p.personKey=d.Personkey Where donationAmount=(Select Max(DonationAmount)from Donation) --a sub query in the select clause--any subquery --in the select clause can only return one value Select Lastname, Firstname, DonationAmount, (Select avg(donationAmount) from Donation) as Average From Donation d inner Join Person p On p.personKey=d.Personkey Where donationAmount>(Select avg(DonationAmount)from Donation) --the in keyword, the value must be "in" the result set Select LastName, Firstname From Person Where Personkey in (Select Personkey from donation) Select * From PersonAddress Where City in ('Bellevue', 'kent', 'shoreline') --return the names of the employees --who have worked on service Grants Select Lastname, Firstname From Person Where PersonKey in (Select PersonKey from Employee where EmployeeKey in (Select EmployeeKey from ServiceGrant)) --same as left outer join Select ServiceName from Service Where ServiceKey not in (Select ServiceKey from ServiceGrant) --the join version Select ServiceName, ServiceGrant.ServiceKey From Service Left outer Join ServiceGrant on Service.ServiceKey=ServiceGrant.ServiceKey Where ServiceGrant.ServiceKey is null --this one uses sub queries to get the average, --see how much the donors donation is above the average, --get the total of all donations (sum) and thenn --calculate what percent the donor's donation is --of the total --all for those donors whose donations are above --the average donation Select Lastname, Firstname, DonationAmount, (Select avg(donationAmount) from Donation) as Average, DonationAmount-(Select avg(donationAmount) from Donation) as [Difference], (Select Sum(DonationAmount) From Donation) as Total, (DonationAmount / (Select Sum(DonationAmount) From Donation)) * 100 As Percentage From Donation d inner Join Person p On p.personKey=d.Personkey Where DonationAmount > (Select avg(DonationAmount) from Donation) --any, all --any means the value is greater (or less then) any other donation --in the list (excludes the min) --all means it is greater than or equal to all the other donations. --results in a max Select DonationAmount from donation where donationAmount > any (Select DonationAmount from Donation) Select DonationAmount from donation where donationAmount >= all (Select DonationAmount from Donation) ---correlated subquery --A correlated subquery is a sub query where --the subquery in the critera refers to a value --in the outer query. This has the effect of --creating a recursive query. In our example --the subquery matches the subscripttypeID in the --main query. This makes it so likes are matched to --like, three year subscriptions are only compared --to other three year subscriptions, one year subscriptions --to other one year subscriptions etc. use MagazineSubscription Select SubscriptTypeID, MagDetID, SubscriptionPrice From MagazineDetail md Where SubscriptionPRice >= (Select Avg(subscriptionPrice) From magazineDetail md2 where md.SubscriptTypeID=md2.SubscriptTypeID) Select Avg(SubscriptionPrice) From MagazineDetail Where SubscriptTypeID=5 Select * from SubscriptionType Select * From MagazineDetail Select
Wednesday, January 23, 2013
SubQueries
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment