varias columnas sql sum row distinct rows

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.