Skip to main content

Usar variables de vinculación y funciones de agregación

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Crear una dinámica de consulta insertando variables de vinculación de Apex.
  • Usar una función de agregado para resumir datos en una consulta.
  • Agrupar los resultados de una consulta.
  • Reconocer cuándo usar la cláusula WHERE y cuándo usar la cláusula HAVING.

Siga el proceso con Trail Together

¿Desea seguir el proceso con un experto a medida que realiza este paso? Eche un vistazo a este video, parte de la serie Trail Together en Trailhead Live.

(Este video comienza en el minuto 01:10:42 a. m., en caso de que desee retroceder y mirar el comienzo del paso nuevamente).

Introducción

Analizamos cómo escribir una consulta SOQL básica y cómo formular consultas que incluyan campos en objetos principales o secundarios. No obstante, como sabe, cada proyecto de desarrollo de aplicaciones es único. Es importante saber cómo personalizar la lógica de negocio para resolver un problema específico.

Variables de vinculación

Una forma de personalizar el código es mediante el uso de variables de vinculación. Es como abrir un formulario en la interfaz de usuario y modificar un campo de entrada para buscar determinados resultados. Observemos un ejemplo de la aplicación DreamHouse. Usted es un agente inmobiliario que vende casas y quiere consultar su inventario de propiedades por un valor menor que USD 200 000. Para eso, escribe esta consulta:

List<Property__c> property = [SELECT Id, Name, Price__c FROM Property__c WHERE Price__c < 200000];

Le resulta bastante sencillo, ¿no? Pero se trata de una consulta estática. que siempre devuelve las casas que valen menos de USD 200 000. ¿Qué ocurre con los demás agentes inmobiliarios y posibles compradores que no pueden escribir consultas SOQL y ejecutarlas en Developer Console? Necesitan una forma más simple de filtrar las propiedades según el precio que les resulte conveniente. ¿Cómo puedes escribir una consulta que sea útil para un comprador cuyo presupuesto es de USD 200 000 y para otro comprador que puede gastar USD 800 000? Aquí es donde entran las variables de vinculación, un tipo de variable de Apex que se utiliza en una consulta SOQL. Puede usar las variables de vinculación como marcadores de posición de valores específicos que proporcionará más adelante.

Nota

No se trata de un concepto nuevo. En Programación orientada a objetos para administradores, aprendió a utilizar un parámetro como marcador de posición en un método. Al llamar al método, pasa un argumento que reemplaza al parámetro. Una variable de vinculación en una consulta es similar a un parámetro en un método. La variable de vinculación se sustituye con un valor específico durante la ejecución de la consulta.

Pensemos en una variable de vinculación denominada maxHomeValue. Declaramos la variable en Apex y luego la utilizamos en una consulta, de este modo:

Integer maxHomeValue = 200000;
List<Property__c> property = [SELECT Name, Price__c FROM Property__c WHERE Price__c < :maxHomeValue];

Observe que, en la consulta, la variable de vinculación está precedida por dos puntos ( : ). Esta consulta devuelve el nombre y el precio del objeto de propiedad, pero los resultados se filtran en función del precio de la casa: WHERE Price__c < :maxHomeValue. El valor de la variable de vinculación, maxHomeValue, se establece fuera de la consulta. Veamos esto en acción.

  1. En Trailhead Playground, haga clic en Iniciador de aplicación, escriba Dream en el cuadro de búsqueda y seleccione la aplicación DreamHouse.
  2. Haga clic en Explorador de propiedades.
    El explorador de propiedades busca las casas disponibles en función número de filtros, como un máximo de rango de precios. El control deslizante Precio máximo acepta valores para la variable de vinculación maxHomeValue.
  3. Mueva el control deslizante Precio máximo a 550 000.

Cada vez que mueve el control deslizante, el valor asociado se modifica en el código mediante la variable de vinculación correspondiente. La consulta se ejecuta y agrega los resultados a una lista de propiedades que se muestra en la página del explorador de propiedades.

El control deslizante establece el valor de variable en el código Apex. Estos valores reemplazan a los marcadores de posición de las variables en la consulta.

Si utiliza las variables de vinculación en la cláusula WHERE, puede definir los valores de variable del código antes de ejecutar la consulta. Las variables de vinculación conforman una dinámica de consulta. Si desea personalizar una consulta para cada usuario, establezca los valores de variables de vinculación según las entradas del usuario. A medida que modifique y revise el código, descubrirá muchos tipos de campos cuyos datos están en constante cambio.

Funciones de agregado

En los reportes, se usan campos de resumen para calcular los valores de registros relacionados. Por ejemplo, podría tener que calcular el número total de propiedades, o bien el promedio o el valor más alto de las propiedades de una ciudad. En SOQL, se usan funciones de agregado para realizar estos y otros cálculos.

Funciones de agregado para consultas SOQL

Función de agregado
Descripción
Ejemplo
COUNT()
Devuelve el número de filas asociado con el campo
SELECT COUNT(Name)
FROM Broker__c
COUNT_DISTINCT()
Devuelve el número de filas exclusivas que coinciden con los criterios de la consulta
SELECT COUNT_DISTINCT(City__c)
FROM Property__c
MIN()
Devuelve el valor mínimo de un campo
SELECT MIN(Days_On_Market__c)
FROM Property__c
MAX()
Devuelve el valor máximo de un campo
SELECT MAX(Beds__c)
FROM Property__c
AVG()
Devuelve el valor promedio de un campo numérico
SELECT City__c, AVG(Days_On_Market__c)
FROM Property__c
GROUP BY City__c
SUM()
Devuelve el valor total de un campo numérico
SELECT SUM(Price__c), Broker__r.Name
FROM Property__c
GROUP BY Broker__r.Name

Usemos las propiedades de una ciudad como ejemplo. Supongamos que empezamos con esta consulta sencilla:

SELECT City__c FROM Property__c

La consulta devuelve la ciudad para cada una de las 12 propiedades.

Resultados de la consulta. Total de filas: 12 La tabla tiene una columna, que muestra las ciudades.

Como no nos interesa la lista completa de ciudades, modificamos la consulta y usamos una función de agregado. Para obtener el número total de propiedades, usamos la función COUNT().

La función de agregado se incluye en la cláusula SELECT de una consulta, de este modo:

SELECT COUNT(City__c) FROM Property__c. COUNT es la función de agregado, City__c es el campo y Property__c es el objeto.

Los paréntesis después del nombre de la función contienen el nombre del campo que se utilizará en el cálculo. En este ejemplo, contamos los valores en el campo City__c.

Ejecutar una consulta COUNT()

  1. En el Editor de consultas, escriba:
    SELECT City__c FROM Property__c
  2. Haga clic en Ejecutar.
    Los resultados de la búsqueda deberían mostrar 12 filas con la ciudad para cada propiedad.
  3. Modifique la consulta de modo que el campo City__c esté inserto en la función COUNT(), de este modo:
    SELECT COUNT(City__c) FROM Property__c
  4. Haga clic en Ejecutar.
    El resultado de la búsqueda debería ser 12, que es el número de propiedades basado en el campo City__c.

    Resultados de la consulta. Total de filas: 1. En la tabla, se muestra un valor: 12.

Si observa que las 12 propiedades se encuentran en solo 2 ciudades, podría preguntarse por qué el número es 12 en lugar de 2. Esto se debe a que la función COUNT() hace un recuento de todos los valores y a menudo incluye varios registros con el mismo valor.

Supongamos que quiere asignar un agente inmobiliario a todas las propiedades de una ciudad. ¿Cuántos agentes necesita? Dicho de otra manera: ¿cuántas ciudades únicas representan las 12 propiedades? Para contar solo ciudades únicas, necesitamos otra función. (Cuando decimos “únicas”, nos referimos a “distintas”).

COUNT_DISTINCT() es similar a COUNT(), excepto que devuelve solo valores únicos (no duplicados).

Ejecutar una consulta COUNT_DISTINCT

  1. En el Editor de consultas, modifique la consulta para usar la función COUNT_DISTINCT(), de este modo:
    SELECT COUNT_DISTINCT(City__c) FROM Property__c
  2. Haga clic en Ejecutar.
    Ahora el resultado debería ser 2, el número de valores únicos de City__c entre todas las propiedades.

    Resultados de la consulta. Total de filas: 1. Columna: count_distinct(City__c) Valor 2.

Cambridge, Boston y Brookline son los valores únicos que se encuentran en el campo City__c. Observe que las funciones COUNT() y COUNT_DISTINCT() distinguen entre mayúsculas y minúsculas. Esto significa que Cambridge no es un duplicado de cambridge. Cambridge y cambridge se consideran dos valores únicos.

MIN(), MAX(), AVG() y SUM()

Otras funciones de agregado útiles son MIN(), MAX(), AVG() y SUM().

Las funciones MIN() y MAX() son sencillas: MIN() busca el valor mínimo (más bajo) y MAX(), el valor máximo (más alto). Sin embargo, tienen algo en particular. Pueden manipular fechas y horas, además de números.

  1. En el Editor de consultas, escriba:
    SELECT MIN(Date_Listed__c) FROM Property__c
  2. Haga clic en Execute (Ejecutar).

La función MIN() devuelve la fecha más temprana. La función MAX() devuelve la fecha más reciente.

Las funciones MIN() y MAX() también reconocen el orden de clasificación de los valores de una lista de selección; por lo tanto, puede buscar el primer o último valor en una lista de selección.

La función AVG() calcula el promedio de todos los valores. La función SUM() calcula la suma de todos los valores. Dado que ambas funciones realizan cálculos, solo funcionan con campos que contienen valores numéricos.

Agrupar los resultados de funciones de agregado

Después de calcular los valores según los datos agregados, puede que quiera informarlos en grupos, como hace en los reportes de resumen. Para agrupar los valores en una consulta SOQL, use la cláusula GROUP BY. Por ejemplo, un cliente de DreamHouse Realty quiere saber qué agentes inmobiliarios vendieron una propiedad (cerraron la operación).

Poner en práctica la cláusula GROUP BY

A continuación, use la cláusula GROUP BY en una consulta.

  1. En el Editor de consultas, escriba:
    SELECT MAX(Status__c), Broker__r.Name
    FROM Property__c
    GROUP BY Broker__r.Name
  2. Haga clic en Ejecutar.
    Los resultados deberían arrojar ocho filas.

    Resultados de la consulta. Total de filas: 8, Columna 1 - max(Status__c), Columna 2 - Name.

Recuerde que esta consulta agrupa las propiedades por agente inmobiliario. Para las propiedades de cada agente, enumeramos el valor de Status__c más avanzado. Es el valor de la lista de selección Estado más cercano al valor final de la lista. Nos interesan los agentes que vendieron propiedades, por lo que refinamos aún más los resultados. Volvamos al principio.

Filtrar los resultados de funciones de agregado

Otra forma de restringir los resultados es con una cláusula HAVING. Esta cláusula filtra los resultados que devuelve la función de agregado.

Suena a algo que resultaría útil para buscar agentes inmobiliarios que vendieron propiedades. La consulta anterior devolvió una lista de agentes que tenían propiedades en cualquier estado. Intente usar la cláusula HAVING para refinar esos resultados.

  1. En el Editor de consultas, escriba:
    SELECT MAX(Status__c), Broker__r.Name
    FROM Property__c
    GROUP BY Broker__r.Name
    HAVING MAX(Status__c) = 'Closed'
  2. Haga clic en Consulta. Debería conseguir un solo agente inmobiliario.

    Resultados de la consulta. Total de filas: 1. Columna 1: max(Status__c). Columna 2: Name.

¡Sí! Allá vamos. La cláusula HAVING restringe los resultados a las propiedades que tienen el estado Cerrado. ¡Bien hecho!

La cláusula WHERE se parece mucho a la cláusula HAVING, ¿no? ¿Cómo decidir cuándo usar WHERE y cuándo usar HAVING?

  • La cláusula WHERE filtra los registros en una consulta SOQL que no tiene una función de agregado.
  • La cláusula HAVING filtra los resultados después de que agregan datos mediante una función de agregado.

Como aprendió en este módulo, SOQL es una herramienta excelente para acceder a los datos de su organización de Salesforce. A medida que continúe desarrollando y expandiendo sus habilidades en programación de Apex, encontrará muchas oportunidades para usar sus conocimientos sobre SOQL. Recuerde, entonces, que puede encontrar detalles, ejemplos y más información sobre Apex y SOQL en los recursos provistos en este módulo. Ahora es momento de avanzar y realizar consultas con SOQL.

Recursos

¡Siga aprendiendo gratis!
Regístrese para obtener una cuenta y continuar.
¿Qué hay para usted?
  • Consiga recomendaciones personalizadas para sus objetivos profesionales
  • Practique sus aptitudes con retos prácticos y pruebas
  • Siga y comparta su progreso con empleadores
  • Póngase en contacto para recibir asesoramiento y oportunidades laborales