powerapps español crear con aplicaciones sql oracle group-by sum max

sql - español - crear aplicaciones con powerapps



SQL no es una función de grupo de un solo grupo (3)

Cuando ejecuto la siguiente instrucción SQL:

SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN

Devuelve el valor de suma máxima de las descargas de un cliente, sin embargo, si trato de encontrar el número de seguridad social al que pertenece ese valor máximo, al agregarlo a la declaración de selección:

SELECT SSN, MAX(SUM(TIME)) FROM downloads GROUP BY SSN

Obtuve el siguiente error:

no es una función grupal de un solo grupo

No entiendo por qué está arrojando este error. Una búsqueda en google apareció con la siguiente acción:

Elimine la función de grupo o la expresión de columna individual de la lista SELECT o agregue una cláusula GROUP BY que incluya todas las expresiones de columnas individuales enumeradas

Por lo que creo que esto está diciendo, dejar caer la función de grupo hace que el valor de la suma no sea válido. Dejar caer la expresión de columna individual (SSN) me dará la suma máxima, no estoy seguro de esa tercera parte.

¿Alguien podría guiar en la dirección correcta?

-Tomek

EDITAR: TIEMPO en esta base de datos se refiere a la cantidad de veces que se descargó


Bueno, el problema es que la SUMA (HORA) para un SSN específico en su consulta es un valor único, por lo que se opone a MAX ya que no tiene sentido (el máximo de un solo valor no tiene sentido).

No estoy seguro de qué servidor de base de datos SQL está utilizando, pero sospecho que desea una consulta más parecida a esta (escrita con un fondo MSSQL, puede que necesite traducir algo al servidor SQL que está utilizando):

SELECT TOP 1 SSN, SUM(TIME) FROM downloads GROUP BY SSN ORDER BY 2 DESC

Esto le dará el SSN con el mayor tiempo total y el tiempo total para ello.

Editar - Si tiene múltiples con un tiempo igual y quiere que todos los use:

SELECT SSN, SUM(TIME) FROM downloads GROUP BY SSN HAVING SUM(TIME)=(SELECT MAX(SUM(TIME)) FROM downloads GROUP BY SSN))


Quizás encuentres esto más simple

select * from ( select ssn, sum(time) from downloads group by ssn order by sum(time) desc ) where rownum <= 10 --top 10 downloaders

Saludos
K


Si quiere un número de descarga para cada cliente, use:

select ssn , sum(time) from downloads group by ssn

Si solo desea un registro, para un cliente con mayor número de descargas, use:

select * from ( select ssn , sum(time) from downloads group by ssn order by sum(time) desc ) where rownum = 1

Sin embargo, si desea ver a todos los clientes con la misma cantidad de descargas, que comparten la posición más alta, use:

select * from ( select ssn , sum(time) , dense_rank() over (order by sum(time) desc) r from downloads group by ssn ) where r = 1