You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多表联合统计:获取searches与推荐表的关键词计数

解决两张表关键词统计合并的问题

没问题,我来帮你搞定这个需求!你之前的UNION ALL写法之所以无效,是因为它把两张表的统计结果混在一起了,没办法分别保留各自的计数。下面给你两种可靠的实现方式,都能得到你想要的结果:

方法一:先分别统计再关联(推荐,性能更优)

先对两张表各自分组统计关键词数量,再通过**全连接(FULL JOIN)**合并结果,确保所有关键词都被覆盖:

SELECT
    -- 取两张表中存在的关键词,避免某张表没有该关键词时出现NULL
    COALESCE(s.keyword, rs.keyword) AS keyword,
    -- 若某张表无该关键词,计数默认0
    COALESCE(s.cnt, 0) AS cnt,
    COALESCE(rs.recommended_cnt, 0) AS recommended_cnt
FROM
    -- 统计searches表的关键词数量
    (SELECT keyword, COUNT(*) AS cnt FROM searches GROUP BY keyword) s
FULL JOIN
    -- 统计recommended_searches表,注意把`key`重命名为keyword方便关联
    (SELECT `key` AS keyword, COUNT(*) AS recommended_cnt FROM recommended_searches GROUP BY `key`) rs
ON s.keyword = rs.keyword
-- 按你需要的列排序,这里是recommended_cnt降序
ORDER BY recommended_cnt DESC;

方法二:合并数据后条件聚合

先把两张表的所有关键词数据合并并标记来源,再通过条件聚合分别统计各自的数量:

SELECT
    keyword,
    -- 统计来自searches表的数量
    SUM(CASE WHEN source = 'searches' THEN 1 ELSE 0 END) AS cnt,
    -- 统计来自recommended_searches表的数量
    SUM(CASE WHEN source = 'recommended' THEN 1 ELSE 0 END) AS recommended_cnt
FROM
    -- 合并两张表的数据,添加来源标记
    (SELECT keyword, 'searches' AS source FROM searches
     UNION ALL
     SELECT `key` AS keyword, 'recommended' AS source FROM recommended_searches) combined
GROUP BY keyword
ORDER BY recommended_cnt DESC;

为什么你之前的写法不对?

你原来的UNION ALL查询会把两张表的统计结果(都是keyword和cnt列)合并到一起,然后再分组,这样得到的是两张表所有关键词的总计数,而不是分别统计各自的数量,自然得不到你想要的结果。

用上面任意一种方法,都能得到你期望的输出:

Array( [keyword] => one [cnt] => 4 [recommended_cnt] => 2 ); Array( [keyword] => two [cnt] => 2 [recommended_cnt] => 4 );

内容的提问来源于stack exchange,提问作者user892134

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:09:14