Я пытаюсь объединить предложение WHERE
с предложением HAVING COUNT(*)
.Но я не могу получить желаемые результаты.
Я хочу найти всех клиентов, которые разместили только один заказ, и заказ составляет "inactive"
.Другими словами, я пытаюсь выбрать строки из таблицы заказов, где количество значений customer_name равно "1", а статус заказа равен "inactive"
.
У меня есть эта таблица:
orders_tbl
+----+--------------+-------------+---------+-------+
| ID | cust_name | status | item_no | price |
+----+--------------+-------------+---------+-------+
| 1 | Scott | active | 4 | 2.0 |
+----+--------------+-------------+---------+-------+
| 2 | James | active | 2 | 4.0 |
+----+--------------+-------------+---------+-------+
| 3 | Eric | inactive | 3 | 8.0 |
+----+--------------+-------------+---------+-------+
| 4 | Polly | active | 3 | 2.0 |
+----+--------------+-------------+---------+-------+
| 5 | Peggy | inactive | 6 | 4.0 |
+----+--------------+-------------+---------+-------+
| 6 | Earl | inactive | 1 | 5.0 |
+----+--------------+-------------+---------+-------+
| 7 | Billy | active | 4 | 2.0 |
+----+--------------+-------------+---------+-------+
| 8 | Peggy | inactive | 5 | 4.0 |
+----+--------------+-------------+---------+-------+
| 9 | Jenny | inactive | 4 | 8.0 |
+----+--------------+-------------+---------+-------+
| 10 | Polly | active | 2 | 2.0 |
+----+--------------+-------------+---------+-------+
| 11 | Scott | inactive | 2 | 4.0 |
+----+--------------+-------------+---------+-------+
| 12 | James | inactive | 1 | 8.0 |
+----+--------------+-------------+---------+-------+
Я хочу, чтобы имя каждого клиента было только одним заказом, и заказ "неактивен".Из приведенной выше таблицы мне нужны следующие результаты:
+----+--------------+-------------+---------+-------+
| ID | cust_name | status | item_no | price |
+----+--------------+-------------+---------+-------+
| 3 | Eric | inactive | 3 | 8.0 |
+----+--------------+-------------+---------+-------+
| 6 | Earl | inactive | 1 | 5.0 |
+----+--------------+-------------+---------+-------+
| 9 | Jenny | inactive | 4 | 8.0 |
+----+--------------+-------------+---------+-------+
Я пробовал этот запрос, а также много вариантов, используя WHERE и COUNT ():
SELECT ID, cust_name, status, item_no, price, COUNT(*)
FROM orders_tbl
WHERE status = 'inactive'
GROUP BY cust_name
HAVING COUNT(*)<2;
Приведенный выше запрос дал результатыблизко к тому, что я хочу.Но я получаю клиентов, у которых есть одна "inactive"
запись, даже если у них есть одна или несколько активных записей.Вот результаты, которые я получаю:
orders_tbl
+----+--------------+-------------+---------+-------+
| ID | cust_name | status | item_no | price |
+----+--------------+-------------+---------+-------+
| 3 | Eric | inactive | 3 | 8.0 |
+----+--------------+-------------+---------+-------+
| 5 | Peggy | inactive | 6 | 4.0 |
+----+--------------+-------------+---------+-------+
| 6 | Earl | inactive | 1 | 5.0 |
+----+--------------+-------------+---------+-------+
| 9 | Jenny | inactive | 4 | 8.0 |
+----+--------------+-------------+---------+-------+
| 11 | Scott | inactive | 2 | 4.0 |
+----+--------------+-------------+---------+-------+
| 12 | James | inactive | 1 | 8.0 |
+----+--------------+-------------+---------+-------+