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

SQL SELECT查询仅返回1行,如何获取指定3个活动的名称及统计次数

问题根因

你现在查询只返回1行的核心原因是没有对活动字段做分组聚合,另外隐式表连接的写法也存在逻辑隐患。

  • 你用了聚合函数count(),但没有指定GROUP BY子句按活动维度拆分统计结果,数据库会默认把所有符合筛选条件的行合并为1行,只会返回第一个匹配到的活动名称,计数是三个活动的总出现次数,和你当前的现象完全吻合。
  • 你用逗号分隔两个表的写法属于隐式内连接,没有明确声明两个表的关联条件,很容易产生笛卡尔积导致计数不准,建议改成显式JOIN声明关联关系。

修正后的SQL语句

SELECT a.name, COUNT(pai.activity_id) AS activity_count
FROM activity a
INNER JOIN person_activity_interval pai ON a.id = pai.activity_id
WHERE pai.oib IN (
    SELECT oib 
    FROM person 
    WHERE living_id IN (
        SELECT id 
        FROM living 
        WHERE country = 'Poland'
    )
)
AND a.id IN (6,7,8)
GROUP BY a.id, a.name
ORDER BY a.id;

修正说明

  1. 用显式INNER JOIN关联两个表,明确activity的id和person_activity_interval的activity_id是关联字段,逻辑更清晰
  2. 简化了筛选条件,直接用a.id IN (6,7,8)就能匹配你要的三个活动,不需要写多层OR判断
  3. 新增GROUP BY a.id, a.name,按活动维度拆分统计结果,每个活动都会单独返回一行名称和对应的出现次数
  4. 给count结果加了别名activity_count,可读性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:57:03