Tecnica
Semi-join
Le righe che hanno almeno una corrispondenza, ognuna tenuta una sola volta.
SELECT p.*
FROM products p
WHERE EXISTS (SELECT 1 FROM order_lines l WHERE l.product_id = p.product_id);
Una semplice JOIN ripeterebbe un prodotto una volta per ogni vendita.
SELECT COUNT(*) AS products,
COUNT(*) FILTER (WHERE EXISTS (SELECT 1 FROM order_lines l WHERE l.product_id = p.product_id)) AS sold
FROM products p;
| products | sold |
|---|---|
| 80 | 74 |
Esercitati:Customers who ordered