Я пытаюсь получить COUNT (*) из объединенной таблицы «Таблица2», где даты являются обычными. PLUS - COUNT (DISTINCT (CID)) из «Table1» и сгруппированы по общему год-месяц:Получите значения COUNT() AND COUNT (DISTINCT()) для двух таблиц
Table1
---------------
cid | date |
----|---------|
321 | 2016-01 |
----|---------|
423 | 2016-01 |
----|---------|
324 | 2016-01 |
----|---------|
546 | 2015-12 |
----|---------|
Table2
---------------
id | dateEnq |
----|---------|
3 | 2016-01 |
----|---------|
6 | 2016-01 |
----|---------|
24 | 2015-12 |
----|---------|
36 | 2015-12 |
----|---------|
MySQL запросов:
SELECT COUNT(DISTINCT (t1.cid)) AS users,
SUBSTR(DATE(t1.date),1,7) AS month,
COUNT(t2.dateEnq) AS enquiries
FROM table1 t1
INNER JOIN table2 t2 ON SUBSTR(t2.dateEnq, 1, 7) = SUBSTR(t1.date, 1, 7)
GROUP BY SUBSTR(DATE(t1.date),1,7)
Это результат я получаю, но значения запросы просто способ не так, я думаю, что это не так считая значения из Таблицы 2, они должны быть как 3, 10, 25 в строке.
Как получить ежемесячный счет из Таблицы2?
users | month | enquiries|
------|----------|-----------
7237 | 2015-10 | 8374 |
12597 | 2015-11 | 30066 |
12980 | 2015-12 | 15514 |
11305 | 2016-01 | 128169 |
А, я понимаю, что вы говорите ... ваш первый запрос работает отлично. – Grant
Да, есть возможность 0, спасибо, что тоже отлично работает. – Grant
... Я мог бы объяснить ... потому что запросы встроенного представления гарантированно имеют уникальные значения 'month' (из-за предложения GROUP BY), соединение между ними будет иметь (не более) одну строку каждый за данный месяц. Таким образом, подсчеты не будут завышены. Вы можете запускать запросы встроенного просмотра отдельно для тестирования. Как только вы понимаете, как исходный запрос генерирует раздутые счета, вопрос в том, как я могу написать инструкцию SQL, которая не генерирует частичный кросс-продукт. Это всего лишь пример одного подхода. Вы можете оставить вопрос открытым и посмотреть, получите ли вы лучший ответ. – spencer7593