- Get all users even if no records in another table
- +----+---------------+----------+
- | id | username | company |
- +----±---------------±----------+
- | 1 | John | 0 |
- | 2 | Jack | 0 |
- | 3 | Casimir | 0 |
- ±----±---------------±----------±
- +----+---------------+----------+--------+
- | id | date | iduser | status |
- +----±---------------±----------+--------+
- | 1 | 2012-05-28 | 1 | 1 |
- | 2 | 2012-05-25 | 1 | 1 |
- | 3 | 2012-04-28 | 2 | 1 |
- | 4 | 2012-03-28 | 1 | 1 |
- | 5 | 2012-02-28 | 2 | 0 |
- ±----±---------------±----------±--------+
- +----------+---------------+-------------+
- | username | COUNT(order) | MAX(date) |
- +----------±---------------±-------------+
- | John | 3 | 2012-05-28 |
- | Jack | 1 | 2012-04-28 |
- | Casimir | 0 | NULL |
- ±----------±---------------±-------------±
- SELECT u.username, COUNT(o.id), MAX(o.date)
- FROM users u
- INNER JOIN orders ON u.id = o.iduser
- WHERE o.status = 1
- GROUP BY u.id
- +----------+---------------+-------------+
- | username | COUNT(order) | MAX(date) |
- +----------±---------------±-------------+
- | John | 3 | 2012-05-28 |
- | Jack | 1 | 2012-04-28 |
- ±----------±---------------±-------------±
- SELECT u.username, COUNT(o.id), MAX(o.date)
- FROM users u
- LEFT OUTER JOIN orders o ON u.id = o.iduser AND o.status = 1
- GROUP BY u.id