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

如何修改SQL语句,实现无对应Fixture记录时返回计数0?

修改SQL实现全网站赛程条目统计(含无数据时显示0)

现有表结构及数据

网站表(Websites)

website_Idwebsite_name
1website_a
2website_b
3website_c
4website_d
5website_e

赛程表(Fixtures)

fixture_Idwebsite_idfixture_details
11a vs b
21c vs d
32e vs f
42g vs h
54i vs j

期望输出

统计每个网站对应的赛程条目数,无对应条目时TotalRows显示0:

website_Idwebsite_nameTotalRows
1website_a2
2website_b2
3website_c0
4website_d1
5website_e0

原SQL问题

当前使用的SQL无法返回无对应赛程的网站条目,原语句如下:

Select fx.website_id, ws.website_name, Count (*) as TotalRows 
FROM fixtures fx
LEFT JOIN websites ws on ws.website_id = fx.website_id
WHERE date_of_entry = '16-01-2023'
GROUP BY
  fx.website_id, ws.website_name

修改后的SQL及说明

正确SQL语句

SELECT 
    ws.website_id, 
    ws.website_name, 
    COUNT(fx.fixture_Id) AS TotalRows
FROM websites ws
LEFT JOIN fixtures fx 
    ON ws.website_id = fx.website_id
    AND fx.date_of_entry = '16-01-2023'
GROUP BY ws.website_id, ws.website_name
ORDER BY ws.website_id

核心修改原因:

  1. 主表切换:以websites作为主表进行左连接,确保所有网站记录都被保留,哪怕没有匹配的赛程数据
  2. 条件位置调整:将日期筛选条件移到JOIN关联条件中,避免WHERE过滤掉左连接产生的空行(无赛程数据的网站)
  3. 统计字段优化:使用COUNT(fx.fixture_Id)代替COUNT(*),因为赛程表的主键在无匹配时会为NULL,COUNT会忽略NULL值,从而返回0;而COUNT(*)会把主表的空行统计为1,不符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:45:22