Sumar resultados de una consulta MySQL: Ejemplos
Sumar resultados de una consulta. En este artículo vamos a sumar resultados MySQL usando consulta SQL, más bien llamado la función de agregado de MySQL SUM, cuya finalidad es la de sumar los valores de una columna en una sentencia SELECT.
Sintaxis de MySQL SUM
Veamos la sintaxis extraída de su web oficial:
SUM([DISTINCT] expresion)
Si observan la sintaxis es muy sencilla solo tenemos que envolver con paréntesis el nombre de la columna de la cual queremos sacar la suma. Además, podemos usar DISTINCT para sumar los valores que no estén repetidos en los registros obtenidos.
Ejemplos de MySQL SUM
a) Consulta básica:
Solo debemos de envolver la columna a suma con paréntesis tal como se observa en el ejemplo.
SELECT SUM(Precios) FROM Productos;
b) Usando DISTINCT
En la consulta SELECT estamos usando SUM y DISTINCT para filtrar los valores distintos y estamos sacando la suma de todos los precios de los productos distintos.
SELECT SUM( DISTINCT Precios) FROM Productos;
c) Usando Where
En este ejemplo estamos obteniendo la suma de todos los precios distintos de los productos, es decir, los precios que sean iguales no se suman.
SELECT SUM(Precios) FROM Productos WHERE Categoria = 'Zapatos';
En este nuevo ejemplo estamos sacando la suma de todos los precios de los productos cuya categoría es ‘Zapatos’.
Sumar resultados de una consulta MySQL
Usando PDO PHP
Trataremos de obtener la suma de una columna de la tabla de base de datos. Sin embargo, usaremos PDO para realizar la consulta.
Como variable de conexión usaremos $db y el código será el siguiente:
<?php $total_income_query = $db->prepare("select sum(credit) from accounts WHERE STR_TO_DATE(date, '%d/%m/%Y') BETWEEN STR_TO_DATE(:startDate, '%d/%m/%Y') AND STR_TO_DATE(:endDate, '%d/%m/%Y')"); $total_income_query->bindParam(':startDate',$startDate); $total_income_query->bindParam(':endDate',$endDate); $total_income_query->execute(); $total = $total_income_query->fetch(PDO::FETCH_NUM); echo $total_income = $total[0]; ?>
Segundo ejemplo con PDO
Aquí les dejare otro ejemplo usando PDO, algo más simple para que se entienda a la perfección la suma de registros obtenidos tras la consulta SQL.
$stmt = $handler->prepare("SELECT SUM(value) AS value_sum FROM codes"); $stmt->execute(); $row = $handler->fetchAll(PDO::FETCH_OBJ); $sum = $row->value_sum;
Sumar resultados MySQL bajo condicional
Podemos darle un poco de dificultad al ejemplo y es colocando condicionales de tipo WHERE y GROUP BY. A continuación, veamos el ejemplo completo.
SELECT sku, nombre, SUM(cantidad) as Total FROM tabla WHERE sku = 1001 GROUP BY sku, nombre;
Pudieras hacerlo así:
- Seleccionas las columnas deseadas
sku
ynombre
- Dentro de la función
SUM()
pasas a la columnacantidad
- Agrupas por
sku
y pornombre
- Filtras con
WHERE
dondesku
= 1001- En este último punto pudieras aplicar mas filtros valiéndose del operador lógico
AND
- En este último punto pudieras aplicar mas filtros valiéndose del operador lógico
Si deseas que la suma se realicé por todos los productos agrupándolos por su sku
entonces solo remueve el WHERE
de tu consulta quedando así:
SELECT sku, nombre, SUM(cantidad) as Total FROM tabla GROUP BY sku, nombre;
Usando MySQLi
Para obtener la suma de los registros obtenidos desde una consulta SQL se puede usar este script completo. Sin embargo, les recomiendo usar PDO por ser más robusto y seguro para conexiones con MySQLi.
Veamos el ejemplo completo
<?php $db = mysqli_connect("localhost", "USER", "PASSWORD", "DATABASE"); /* verificar la conexión */ if (mysqli_connect_errno()) { die("Conexión fallida:" . mysqli_connect_error()); } $sql = "SELECT SUM(horas) as total, nombre FROM tabla GROUP BY(nombre)"; $result = mysqli_query($db, $sql); echo "<table border>"; while ($a = mysqli_fetch_assoc($result)){ echo "<tr>"; echo "<td>".$a['nombre']."</td>"; echo "<td>".$a['total']."</td>"; echo "</tr>"; } echo '</table>';
Usando MySQLi Object-Oriented
Si están programado con MySQLi orientado a objetos aquí les dejo el ejemplo completo para realizar la suma de registros
$consulta="SELECT SUM(precio) as TotalPrecios FROM productos"; $resultado=$con -> query($consulta); $fila=$resultado->fetch_assoc(); //que te devuelve un array asociativo con el nombre del campo $TotalPrecios=$fila['TotalPrecios']; //Este es el valor que acabas de calcular en la consulta
Conclusión
Hemos logrado sumar resultados MySQL a través de una consulta usando PDO y MySQLi. Por lo tanto, el más recomendado es PDO.
La implementación de la suma es muy sencilla y en este artículo hemos usado la cláusula SUM de MySQL para que sume todos los registros obtenidos de la consulta a través de lenguaje PHP.