You need to enable JavaScript to run this app. 如何在单条SELECT中计算子查询计数占比,完成商品评论统计排序
优惠活动
大模型
产品
解决方案
定价
更多

如何在单条SELECT中计算子查询计数占比,完成商品评论统计排序

单条SELECT实现方案

核心实现思路

  • 无需创建视图,也不需要多层嵌套左连接,仅通过对reviews表做一次分组聚合扫描,就能同步算出所有需要的统计指标,完全满足单条查询的实现要求。
  • 分组阶段通过条件聚合,一次性计算每个商品的三类关键统计值:
    • 商品已验证评论总数:统计符合verified_purchase = TRUE条件的评论条数
    • 商品五星评论总数:统计符合star_rating = 5条件的评论条数
    • 商品全量评论总数:统计该商品下所有的评论总条数
  • 拿到全量商品的统计值后,直接过滤出已验证评论数超过100的商品,再计算五星评论数占总评论数的比例,最后按该比例排序即可输出结果。

可直接使用的查询语句

注:请根据实际表结构调整两点内容:

  • 核对已验证评论的字段名,部分表中该字段拼写为verified_purshase,需和表结构保持一致
  • 适配数据库函数逻辑,若使用PostgreSQL等不支持IF函数的数据库,可将条件聚合替换为COUNT(CASE WHEN verified_purchase = TRUE THEN 1 END)的等价写法
SELECT
  product_id,
  verified_review_count,
  five_star_review_count,
  total_review_count,
  five_star_review_count / total_review_count AS five_star_ratio
FROM (
  SELECT
    product_id,
    COUNT(IF(verified_purchase = TRUE, 1, NULL)) AS verified_review_count,
    SUM(IF(star_rating = 5, 1, 0)) AS five_star_review_count,
    COUNT(*) AS total_review_count
  FROM reviews
  GROUP BY product_id
) AS product_stats
WHERE verified_review_count > 100
ORDER BY five_star_ratio DESC;

原有写法的不足

  • 多层子查询关联的实现方式,会对reviews表做多次全表扫描,执行效率远低于单次分组聚合的方案。
  • 现有逻辑仅完成了已验证评论数超100的商品ID筛选,未计算五星评论占总评论数的比例,无法支撑排序需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 17:24:08