1
0
mirror of synced 2024-12-14 23:26:04 +03:00
doctrine2/manual/docs/en/dql-doctrine-query-language/group-by-having-clauses.txt
2007-11-20 19:22:33 +00:00

49 lines
1.3 KiB
Plaintext

DQL GROUP BY syntax:
<code>
GROUP BY groupby_item {, groupby_item}*
</code>
DQL HAVING syntax:
<code>
HAVING conditional_expression
</code>
* GROUP BY and HAVING clauses can be used for dealing with aggregate functions
* Following aggregate functions are available on DQL: COUNT, MAX, MIN, AVG, SUM
Selecting alphabetically first user by name.
<code type="sql">
SELECT MIN(u.name) FROM User u
</code>
Selecting the sum of all Account amounts.
<code type="sql">
SELECT SUM(a.amount) FROM Account a
</code>
* Using an aggregate function in a statement containing no GROUP BY clause, results in grouping on all rows. In the example above we fetch all users and the number of phonenumbers they have.
<code type="sql">
SELECT u.*, COUNT(p.id) FROM User u, u.Phonenumber p GROUP BY u.id
</code>
* The HAVING clause can be used for narrowing the results using aggregate values. In the following example we fetch all users which have atleast 2 phonenumbers
<code type="sql">
SELECT u.* FROM User u, u.Phonenumber p HAVING COUNT(p.id) >= 2
</code>
<code type="php">
// retrieve all users and the phonenumber count for each user
$users = $conn->query("SELECT u.*, COUNT(p.id) count FROM User u, u.Phonenumber p GROUP BY u.id");
foreach($users as $user) {
print $user->name . ' has ' . $user->Phonenumber[0]->count . ' phonenumbers';
}
</code>