Как считать строки из двух таблиц с помощью одной команды в MySQL - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу сосчитать 2 таблицы из другой таблицы, я выбираю date, затем я группирую его.

вот что я пытаюсь

SELECT 
(SELECT date(date), COUNT(sh_sh) FROM sh_url GROUP BY date(date)) AS URLs, 
(SELECT date(date), COUNT(ip) FROM tracking GROUP BY date(date)) AS IP 
FROM dual

, но я получаю ошибку

1241 - Операнд должен содержать 1 столбец (столбцы)

Возможно ли сделать это одной командой?

вывод должен быть таким

date(url)    count(sh_sh)    date(ip)    count(ip)
---------    ------------    ----------  ----------
2018-04-25   123             2018-04-25  123123
2018-04-26   456             2018-04-26  321
2018-04-27   789             2018-04-27  3125

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Когда вы используете подзапрос в качестве значения, он может возвращать только одну строку и один столбец. Вам нужно использовать JOIN:

SELECT urls.date, urls.count AS sh_count, ip.count AS ip_count
FROM (SELECT date(date) AS date, COUNT(*) AS count FROM sh_url GROUP BY date(date)) AS urls
JOIN (SELECT date(date) AS date, COUNT(*) AS count FROM tracking GROUP BY date(date)) AS ip
ON urls.date = ip.date
0 голосов
/ 26 апреля 2018

Я бы сформулировал ваши проблемы, используя объединение двух подзапросов:

SELECT
    t1.date,
    t1.url_cnt,
    COALESCE(t2.ip_cnt, 0) AS ip_cnt
FROM
(
    SELECT date, COUNT(*) url_cnt
    FROM sh_url
    GROUP BY date
) t1
LEFT JOIN
(
    SELECT date, COUNT(*) ip_cnt
    FROM tracking
    GROUP BY date
) t2
    ON t1.date = t2.date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...