sql - columnas - sum distinct tableau
¿Cómo SUMO Filas DISTINCT? (3)
Si solo quieres una cifra global para intentarlo
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
Estoy luchando con una consulta donde necesito SUMAR Filas DISTINCT. Tiene que haber una forma de hacer esto ... pero estoy perdido.
Esto es lo que tengo:
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)
Esto me da las 34 filas que proporcionan números de población distintos para cada condado perteneciente a userid4, pero ¿cómo obtendría la suma de PopEstimate2005 y EstimatesBase2000?
Algo así como (pero esta no es una consulta legal):
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
Por supuesto, tan pronto como agregue Zipcodes.CountyID al final del GroupBy, vuelvo con mis 34 filas.
Muchas gracias por cualquier ayuda.
Russell Schutte. . . . .
Después de obtener la ayuda a continuación, en particular la ayuda de Robb, pude obtener lo que realmente quería: un total de los detalles de población de cada usuario en una sola consulta:
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
¡Gracias a todos los que contribuyeron!
Russell Schutte
Una respuesta fácil es usar "agrupar por". Agrupar por tiene el mismo efecto con los mismos campos que los distintos, pero le permite usar funciones agregadas. Puede agregar una cláusula "Tener" después del grupo para filtrar los registros que le gustaría ver.
Utilice GROUP BY junto con los agregados SUM () y 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
Dependiendo de su servidor de db, esto será más eficiente que hacer una sub selección.