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

SQL如何按title分组统计单列URL各值计数并横向展示

问题原因

你编写的SQL无法得到预期结果,核心存在两个错误:

  • 分组维度错误:需求要求每个title(发言人)单独占一行,但你在GROUP BY中加入了url字段,会将每个「title+url」的组合拆分为独立行,无法实现单行展示所有URL计数的效果。
  • SELECT字段不符合聚合规则:你在查询中加入了id、page_url、created_at这类单条点击记录独有的明细字段,这类字段既不参与分组,也没有做聚合计算,要么会触发SQL语法报错,要么会返回随机的无效值,和按发言人维度统计的需求冲突。
正确SQL写法

如果只需要按发言人维度统计各URL的点击计数,使用如下代码即可:

SELECT 
  title AS "Speaker Name",
  COUNT(CASE WHEN url='Apple' THEN 1 END) AS Apple,
  COUNT(CASE WHEN url='Google (online)' THEN 1 END) AS Google,
  COUNT(CASE WHEN url='Yahoo (online)' THEN 1 END) AS Yahoo,
  COUNT(CASE WHEN url='Office 365 (online)' THEN 1 END) AS `Office 365`,
  COUNT(CASE WHEN url='Outlook' THEN 1 END) AS Outlook,
  COUNT(CASE WHEN url='Outlook.com (online)' THEN 1 END) AS `Outlook.com (online)`
FROM vepdb.click_tracking 
WHERE app_id=10000076 
GROUP BY title;
补充说明
  • 如果你需要同时展示和发言人一一绑定的固定属性(比如和title一一对应的user_id),可以将这类字段同时加入SELECT和GROUP BY子句,示例如下:
SELECT 
  user_id AS "User Id",
  title AS "Speaker Name",
  COUNT(CASE WHEN url='Apple' THEN 1 END) AS Apple,
  COUNT(CASE WHEN url='Google (online)' THEN 1 END) AS Google,
  COUNT(CASE WHEN url='Yahoo (online)' THEN 1 END) AS Yahoo,
  COUNT(CASE WHEN url='Office 365 (online)' THEN 1 END) AS `Office 365`,
  COUNT(CASE WHEN url='Outlook' THEN 1 END) AS Outlook,
  COUNT(CASE WHEN url='Outlook.com (online)' THEN 1 END) AS `Outlook.com (online)`
FROM vepdb.click_tracking 
WHERE app_id=10000076 
GROUP BY user_id, title;
  • 不要将id、page_url、created_at这类单条点击行为独有的明细字段加入查询,这类字段会拆分聚合粒度,导致输出结果不符合预期。
  • 带空格、特殊字符的列别名建议用反引号(`)包裹,不要使用单引号,避免不同数据库的语法兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:57:30