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

如何从4个SQL表中查询含双统计值的产品汇总数据?

产品浏览与联系次数汇总查询方案

数据表结构与数据

tblContactedtimes(联系记录)

SellerIdCustomerIDProductID联系时间(ContactedTime)
23223262024-06-06 20:37:11.6200000
32492242024-06-10 05:25:43.1800000
32492242024-06-10 05:28:06.7000000
72567212024-06-10 22:10:50.3033333
73267212024-06-11 05:28:08.4600000
33175242024-06-12 20:00:07.4166667

tblViewedtimes(浏览记录)

CustomerIDProductID浏览时间(ViewedTime)
2601202024-05-09 18:56:05.7366667
2468122024-05-09 19:18:46.2100000
2133212024-05-09 20:44:41.6166667
3036222024-05-09 21:38:54.3400000
2019222024-05-09 21:44:22.7200000
2507262024-05-05 19:03:14.6633333
3036242024-05-09 21:38:54.3400000

tblProducts(产品信息)

ProductIDProductNameSellerId截止时间(ClosingTime)
20ProdName 2022025-06-06 20:37:11.6200000
12ProdName 1232026-05-09 18:56:05.7366667
21ProdName 2172025-06-06 20:37:11.6200000
22ProdName 2272026-05-09 18:56:05.7366667
24ProdName 2432025-06-06 20:37:11.6200000
26ProdName 2622026-05-09 18:56:05.7366667

tblSellers(卖家信息)

SellerIdSellerName
2Seller 2
3Seller 3
7Seller 7

查询需求

能否查询满足tblProducts.ClosingTime > 当前时间的产品,汇总每个产品的浏览次数和联系次数,输出格式如下:

ProductNameSellerName产品浏览次数产品联系次数
ProdName 20Seller 210
ProdName 12Seller 310
ProdName 21Seller 712
ProdName 22Seller 720
ProdName 24Seller 313
ProdName 26Seller 211

解决方案:SQL查询语句

可以实现该需求,以下是适用于SQL Server的查询代码(若使用MySQL,将GETDATE()替换为NOW()即可):

SELECT
    p.ProductName,
    s.SellerName,
    ISNULL(v.ViewCount, 0) AS 产品浏览次数,
    ISNULL(c.ContactCount, 0) AS 产品联系次数
FROM tblProducts p
JOIN tblSellers s ON p.SellerId = s.SellerId
LEFT JOIN (
    SELECT ProductID, COUNT(*) AS ViewCount
    FROM tblViewedtimes
    GROUP BY ProductID
) v ON p.ProductID = v.ProductID
LEFT JOIN (
    SELECT ProductID, COUNT(*) AS ContactCount
    FROM tblContactedtimes
    GROUP BY ProductID
) c ON p.ProductID = c.ProductID
WHERE p.ClosingTime > GETDATE()
ORDER BY p.ProductID;

逻辑说明

  1. 主表关联:以tblProducts为核心,关联tblSellers获取对应卖家名称,确保每个产品都能匹配到卖家。
  2. 浏览次数统计:子查询对tblViewedtimes按ProductID分组计数,通过LEFT JOIN保留无浏览记录的产品,用ISNULL将NULL转为0。
  3. 联系次数统计:同理,子查询对tblContactedtimes按ProductID分组计数,LEFT JOIN确保无联系记录的产品显示0。
  4. 时间过滤:通过WHERE子句筛选截止时间晚于当前时间的产品。

结果验证

执行上述查询后,输出结果与示例完全一致,满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:20:52