Cuenta el número de filas distintas para valores múltiples

Consideremos esta tabla especificando cuántas veces una persona compró una propiedad.

+--------+----------+
|  user  | property |
+--------+----------+
| john   | car      |
| john   | car      |
| john   | house    |
| peter  | car      |
| peter  | car      |
| amanda | house    |
| amanda | house    |
+--------+----------+

Necesito saber cuántas veces se compró un automóvil una vez, cuántas veces se compró una casa una vez, etc. Algo así:

+----------+---+---+
| property | 1 | 2 |
+----------+---+---+
| cars     | 4 | 2 |
| house    | 3 | 1 |
+----------+---+---+
¿Cuántas veces se compró un carro?Cuatrodos parapeter y dos paraJuan.¿Cuántas veces un auto fue comprado dos veces?Dos, para los mismos chicos.¿Cuántas veces se compró una casa?Tresdos paraAmanda y una vez porJuan.¿Cuántas veces se compró una casa dos veces? Solamenteuna vez, paraAmanda

¿Es esto posible hacer solo usando consultas SQL?

No me importa el rendimiento ni las formas de hackers.Hay más de dos frecuencias.

Hay un conjunto fijo de tiempo en que una persona puede comprar una propiedad (5), por lo que no es problema especificar las columnas manualmente en la consulta. Quiero decir que no hay problema haciendo algo como:

SELECT /* ... */ AS 1, /* ... */ AS 2, /* ... */, AS 3 /* ... */

Respuestas a la pregunta(7)

Su respuesta a la pregunta