gpt4 book ai didi

mysql - COUNT(table_name.column_name) 没有给出准确的计数。我是否在错误的列上应用了 GROUP BY?

转载 作者:可可西里 更新时间:2023-11-01 07:37:14 25 4
gpt4 key购买 nike

我有一个有点复杂的数据库结构在运行,用于跟踪产品。这是由 MySQL Workbench 生成的图表:

Products Diagram

在此结构下,我添加了 3 个产品。所有这三种产品都具有属性 colorred 选项。我在这里设置了一个 sql fiddle :http://sqlfiddle.com/#!2/68470/4显示我正在运行的查询,试图让 opt_count 列在 attribute 列为 color 的行上说 3 >选项 列为红色

几乎所有其他 opt_count 值也是错误的,所以我怀疑我没有按正确的列分组,或者我没有正确地处理整个问题。

如何获得正确的 opt_count 以显示每一行?

最佳答案

正如其他人所说,您的架构是问题所在,因为您拥有多对多关系(许多产品可能有很多选项),这使得查询更加困难。

这是一个查询,可以为您提供您所要求的准确输出。它显示了每个选项,该选项分配给了多少个唯一产品(COUNT(distinct product_id)),并提供了一个逗号分隔的分配的 product_id 值列表。

SELECT pvo.option, 
count(distinct product_id),
group_concat(distinct product_id) products
FROM (`products`)
JOIN `product_variant_combinations` pvc using(`product_id`)
JOIN `product_variants` pv using(`combination_id`)
JOIN `product_variant_ao_relation` pv_ao using(`ao_id`)
JOIN `product_variant_options` pvo using(`option_id`)
JOIN `product_variant_attributes` pva using(`attribute_id`)
group by pvo.option;

这是红色的输出:

红色 3 111026,111025,111024

看这里: http://sqlfiddle.com/#!2/68470/133

你问的是如何添加属性:

SELECT pva.attribute, pvo.option, count(distinct product_id), group_concat(product_id)
FROM (`products`)
JOIN `product_variant_combinations` pvc using(`product_id`)
JOIN `product_variants` pv using(`combination_id`)
JOIN `product_variant_ao_relation` pv_ao using(`ao_id`)
JOIN `product_variant_options` pvo using(`option_id`)
JOIN `product_variant_attributes` pva using(`attribute_id`)
group by pva.attribute, option

您必须对 SELECT 子句中的每个非聚合表达式进行 GROUP BY。在这种情况下,两个聚合表达式是 COUNT 和 GROUP_CONCAT,因此,您必须 GROUP BY pva.attribute, pvo.option

您可能想在 GROUP BY 上找到一个很好的 SQL 教程。

关于mysql - COUNT(table_name.column_name) 没有给出准确的计数。我是否在错误的列上应用了 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21123644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com