У меня есть 2 таблицы:
Таблица 1:
| order_id | shop_id | customer_id | total | date |
-------------------------------------------------------
| 9005 | A | 1 | 1205 | 20110210 |
| 9006 | A | 2 | 8591 | 20110212 |
| 9007 | A | 2 | 3472 | 20110216 |
| 9008 | B | 1 | 6310 | 20110218 |
-------------------------------------------------------
Таблица 2:
| shop_id | customer_id | reference |
-------------------------------------
| A | 1 | Friend |
| A | 2 | Internet |
| B | 1 | Friend |
| C | 1 | Friend |
-------------------------------------
Я хочу выбрать различные значения (shop_id, customer_id) изtable1 (фильтруется по дате), а затем подсчитывает ссылки в таблице 2.
Ожидаемый результат:
| reference | count |
---------------------
| Friend | 2 |
| Internet | 1 |
----------------------
Пока что я использую запрос:
ВЫБЕРИТЕ ссылку, COUNT (*) в качестве счетчика FROM table1 JOIN table2 USING (shop_id, customer_id) GROUP BY reference
И результат:
| reference | count |
---------------------
| Friend | 2 |
| Internet | 2 |
---------------------
Проблема заключается в том, что счет идет 2 раза: shop_id = A и customer_id = 2.Вот почему «Интернет» учитывается дважды.
Может ли кто-нибудь помочь мне определить, что не так?Если возможно, я бы хотел добиться этого без использования подзапросов (техническое ограничение).
Спасибо.
Дамп SQL:
CREATE TABLE `table1` (
`order_id` int(11),
`shop_id` char(1),
`customer_id` int(11),
`total` smallint(6),
`date` date
);
INSERT INTO `table1` (`order_id`, `shop_id`, `customer_id`, `total`, `date`) VALUES
('9005', 'A', '1', '1205', '2011-02-10'),
('9006', 'A', '2', '8591', '2011-02-12'),
('9007', 'A', '2', '3472', '2011-02-16'),
('9008', 'B', '1', '6310', '2011-02-18');
CREATE TABLE `table2` (
`customer_id` int(11),
`shop_id` char(1),
`reference` enum('Friend','Internet')
);
INSERT INTO `table2` (`customer_id`, `shop_id`, `reference`) VALUES
('1', 'A', 'Friend'),
('2', 'A', 'Internet'),
('1', 'B', 'Friend'),
('1', 'C', 'Friend');