【问题标题】:How to Count Rows from two Tables with one Command in MySQL如何在 MySQL 中使用一个命令计算两个表中的行数
【发布时间】:2018-04-26 08:32:54
【问题描述】:

我想从不同的表中计算 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

【问题讨论】:

  • 使用 SQL 连接:w3schools.com/sql/sql_join.asp
  • 您正在从子查询创建派生列。当你这样做时,你不能在 1 列中粘贴 2 列。这就是为什么它告诉您操作数应该包含 1 列。您不能在IP 中选择两列(dateCOUNT(ip))。得到它?您可以使用JOIN 重写此查询。

标签: mysql


【解决方案1】:

我会使用两个子查询的连接来表达您的问题:

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;

【讨论】:

    【解决方案2】:

    当您使用子查询作为值时,它只能返回一行和一列。你需要使用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
    

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 2015-06-04
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多