Tengo dificultades para escribir una consulta que devuelva la SUMA de valores en un campo. Necesito SUMARlo solo una vez si hay varias filas con el mismo valor en otros 2 campos y SUMAR todos los valores si hay
Tengo una tabla con 3 campos:
Si el UTM Source y el Company ID son MISMOS, necesito contar valores distintos de Active users Si el UTM Source y el Company ID son DIFERENTES, necesito contar todos los valores de Active users
Aquí está la tabla de muestra: https://docs.google.com/spreadsheets/d/1jytu0_YduNlFXAgs_kVZ8M3UbPKnKVQWgXRE6r10p6I/edit?usp=sharing
Me las arreglé para escribir esta consulta:
SELECT DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users FROM customers GROUP BY `UTM Source`, `Company ID`) AS customers_2` Obtengo casi lo que necesito, ya que devuelve solo una fila para el correo electrónico de UTM Source con valor 9 en el campo Active users . Ahora solo necesito resumir todas las mismas UTM Source , así que probé esta consulta:
SELECT `UTM Source`, `Users` FROM ( SELECT DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users FROM customers GROUP BY `UTM Source`, `Company ID`) AS customers_2 GROUP BY `UTM Source`Pero estoy recibiendo algún tipo de error:
La expresión #2 de la lista SELECT no está en la cláusula GROUP BY y contiene la columna no agregada 'customers_2.Users' que no depende funcionalmente de las columnas en la cláusula GROUP BY; esto es incompatible con sql_mode=only_full_group_by
Revisé ese hilo , pero no lo entiendo bien ya que soy nuevo en las bases de datos. Estoy usando MAMP, MySQL 5.27.6 en MAC con Sequel Pro y esta es solo una base de datos de prueba que creé a partir de la tabla XLS que recibí para resolver esta tarea.
Gracias por cualquier consejo.
Agrupar por es para un resultado agregado, por lo que en su caso o solo necesita el resultado de la subconsulta, entonces no necesita agrupar por
SELECT `UTM Source`, `Users` FROM ( SELECT DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users FROM customers GROUP BY `UTM Source`, `Company ID`) customers_2o debe agregar una función de agregación, por ejemplo:
SELECT `UTM Source`, sum(`Users`) FROM ( SELECT DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users FROM customers GROUP BY `UTM Source`, `Company ID`) customers_2 GROUP BY `UTM Source`o ypu debe mencionar en el grupo y la columna no involucrada por la función de agregación
SELECT `UTM Source`, `Users` , count(*) FROM ( SELECT DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users FROM customers GROUP BY `UTM Source`, `Company ID`) customers_2 GROUP BY `UTM Source`, `Users`Sin ver qué resultados realmente desea producir a partir de esos datos, su pregunta actualmente es bastante ambigua.
Mi interpretación personal es que desea la suma de la columna de active users por UTM Source . Excepto, cuando varias filas coincidan exactamente , solo deben incluirse una vez.
A la inversa, son dos pasos...
Lo cual me da lo siguiente...
SELECT `UTM Source`, SUM(`Active Users`) AS Users FROM ( SELECT DISTINCT `UTM Source`, `Company ID`, `Active Users` FROM customers ) deduplicated_data GROUP BY `UTM Source`EDITAR:
Sin embargo, me pregunto si a la declaración del problema le falta algo de información. ¿Por qué la misma UTM Source tendría el mismo Company ID con varios números diferentes de Active Users ?
Por ejemplo, ¿tal vez hay un campo de fecha? ¿En cuyo caso posiblemente necesite encontrar el registro con la fecha más reciente?
Sería útil obtener más información (edite su pregunta) , sobre la razón por la que necesita hacer esto / lo que está tratando de lograr, y los resultados exactos que desea generar a partir de los datos de ejemplo dados.
(Además, no vincule a Google Docs, incluya todos los datos como texto en su pregunta, Stack Overflow tiene un formato de texto adecuado en el editor y significa que esa pregunta no se 'romperá' si luego elimina esa hoja).