Agrupamiento
Para agrupar por un campo dado, use el método groupBy().
$query->groupBy('uid');
El código anterior indicará a la consulta que agrupe por el campo uid. Tenga en cuenta que el nombre del campo aquí debe ser un alias creado por los métodos addField() o addExpression(), por lo que en la mayoría de los casos querrá usar el valor devuelto por esos métodos para asegurarse de que se usa el alias correcto.
Para obtener el conteo de filas agrupadas por un campo, por ejemplo uid, puede hacer lo siguiente:
$query->addExpression('count(uid)', 'uid_node_count');
Para agrupar por varios campos, simplemente llame a groupBy() varias veces en el orden deseado.
Having
Puede agregar una condición para valores agregados.
$query->having('COUNT(uid) >= :matches', [':matches' => $limit]);
En este ejemplo, se encontrarán los casos donde el número de identificadores uid sea mayor o igual a $limit. Tenga en cuenta que el primer parámetro de having no se filtra antes de enviarse a la base de datos, por lo que los valores del usuario deben pasarse mediante el segundo parámetro.
Ejemplos de groupBy y having
El siguiente código cuenta la cantidad de nodos por UID:
$query = $connection->select('node', 'n') ->fields('n', ['uid']); $query->addExpression('count(uid)', 'uid_node_count'); $query->groupBy("n.uid"); $query->execute();
El siguiente bloque de código toma el ejemplo anterior de conteo de nodos por uid y limita los resultados a uids que tengan al menos 2 registros.
$query = $connection->select('node', 'n') ->fields('n',['uid']); $query->addExpression('count(uid)', 'uid_node_count'); $query->groupBy("n.uid"); $query->having('COUNT(uid) >= :matches', [':matches' => 2]); $results = $query->execute();
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.