Как мне СУЩЕСТВОВАТЬ ОТЛИЧНЫЕ строки? - PullRequest
7 голосов
/ 16 декабря 2010

Я борюсь с запросом, где мне нужно SUM DISTINCT Rows.Должен быть способ сделать это ... но я потерян.

Вот что у меня есть:

SELECT DISTINCT Zipcodes.CountyID,
us_co_est2005_allData.PopEstimate2005, 
us_co_est2005_allData.EstimatesBase2000,
users_link_territory.userID
FROM
Zipcodes Inner Join Users_link_territory ON zipcodes.CountyID = 
Users_link_territory.CountyID Inner Join
us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.State AND zipcodes.code
= us_co_est2005_alldata.County
WHERE (users_link_territory.userid = 4)

Это дает мне 34 строки, которые обеспечивают различную популяциюномера для каждого округа, принадлежащего userid4, но как мне получить СУММ PopEstimate2005 и EstimatesBase2000?

Что-то вроде (но это не юридический запрос):

SELECT DISTINCT Zipcodes.CountyID,
SUM(us_co_est2005_allData.PopEstimate2005) AS Population2005, 
SUM(us_co_est2005_allData.EstimatesBase2000) AS Population2000,
users_link_territory.userID
FROM
Zipcodes Inner Join Users_link_territory ON zipcodes.CountyID = 
Users_link_territory.CountyID Inner Join
us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.State AND zipcodes.code
= us_co_est2005_alldata.County
WHERE (users_link_territory.userid = 4)
GROUP BY users_link_territory.userid

Конечно, как только я добавляю Zipcodes.CountyID в конец GroupBy, я снова возвращаюсь со своими 34 строками.

Большое спасибо за любую помощь.

Рассел Шютте.,,,.

После получения приведенной ниже справки, в частности, помощи Робба, я смог получить то, что мне действительно нужно, - общую информацию о каждом идентификаторе пользователя в одном запросе:

SELECT     SUM(POPESTIMATE2005) AS Expr1, SUM(ESTIMATESBASE2000) AS Expr2, UserID
FROM         (
    SELECT DISTINCT zipcodes.CountyID, us_co_est2005_alldata.POPESTIMATE2005, us_co_est2005_alldata.ESTIMATESBASE2000, users_link_territory.UserID
    FROM          zipcodes INNER JOIN
    users_link_territory ON zipcodes.CountyID = users_link_territory.CountyID INNER JOIN
    us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.STATE AND zipcodes.Code = us_co_est2005_alldata.COUNTY
    ) As FOO
GROUP BY UserID

Спасибовсе, кто внес свой вклад!

Рассел Шутте

Ответы [ 3 ]

8 голосов
/ 16 декабря 2010

Если вам нужна общая цифра, попробуйте

select sum(PopEstimate2005), sum(EstimatesBase2000)
from(
    SELECT  Distinct
        Zipcodes.CountyID, 
        us_co_est2005_allData.PopEstimate2005, 
        us_co_est2005_allData.EstimatesBase2000, 
        users_link_territory.userID 
    FROM 
        Zipcodes Inner Join 
        Users_link_territory ON zipcodes.CountyID = Users_link_territory.CountyID Inner Join 
        us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.State AND zipcodes.code = us_co_est2005_alldata.County 
    WHERE 
        (users_link_territory.userid = 4)
) as foo
3 голосов
/ 16 декабря 2010

Используйте GROUP BY вместе с SUM () и COUNT () агрегатов.

SELECT count(*) as totalRows, Zipcodes.CountyID,
   sum(us_co_est2005_allData.PopEstimate2005) as SumPopEstimate2005, 
   sum(us_co_est2005_allData.EstimatesBase2000) as SumEstimatesBase2000,
  users_link_territory.userID

FROM
  Zipcodes Inner Join Users_link_territory ON zipcodes.CountyID = 
  Users_link_territory.CountyID Inner Join
  us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.State AND zipcodes.code = us_co_est2005_alldata.County

WHERE (users_link_territory.userid = 4)

GROUP BY  Zipcodes.CountyID,users_link_territory.userID

В зависимости от вашего сервера БД, это будет более эффективно, чем выборочный выбор.

2 голосов
/ 16 декабря 2010

Простой ответ - использовать «Группировать по».Группировка по имеет тот же эффект с теми же полями, что и отдельные, но позволяет использовать агрегатные функции.Вы можете добавить предложение «После» после группы, чтобы отфильтровать записи, которые вы хотели бы видеть.

...