SQL如何统计同表中每个产品对应的各食材关联出现次数
SQL实现方案
核心逻辑是对产品、食材两个字段联合分组统计次数,通用SQL写法如下(所有支持标准SQL的数据库都可运行):
SELECT Products, Ingredients, COUNT(*) AS relation_count FROM 替换为你的实际表名 GROUP BY Products, Ingredients -- 可选排序规则,可根据需求调整 ORDER BY Products, relation_count DESC;
运行上述语句会得到每行都带产品名的统计结果,如果需要和你示例中完全一致、同一产品仅第一行显示产品名的展示效果,以MySQL为例可借助窗口函数实现:
SELECT IF(row_num = 1, Products, '') AS Products, Ingredients, relation_count FROM ( SELECT Products, Ingredients, COUNT(*) AS relation_count, ROW_NUMBER() OVER(PARTITION BY Products ORDER BY COUNT(*) DESC) AS row_num FROM 替换为你的实际表名 GROUP BY Products, Ingredients ) AS stat_result ORDER BY Products, row_num;
逻辑说明
- 内层子查询先按产品、食材两个维度分组,统计每组的关联次数,同时给每个产品下的食材按统计次数降序排序打行号
- 外层判断行号为1的行才显示产品名,其余行产品名留空,即可实现你给出的示例输出效果
内容的提问来源于stack exchange,提问作者KingBeast
相关产品推荐
相关产品推荐

