Mysql-可能的解决方案;按组分组“concat()”;?
是否可以根据聚合函数的结果对结果进行分组,而不将结果嵌套在聚合函数上Mysql-可能的解决方案;按组分组“concat()”;?,mysql,sql,group-by,Mysql,Sql,Group By,是否可以根据聚合函数的结果对结果进行分组,而不将结果嵌套在聚合函数上 "SELECT b.pizza, GROUP_CONCAT(t.topping_names SEPARATOR ',') AS topping_string FROM bascket AS b LEFT JOIN toppings AS t ON t.pizza = b.pizza GROUP BY pizza, topping_string " 上面的查询应该返回所有按其所选topping_字符串分组的比萨饼(应该
"SELECT b.pizza, GROUP_CONCAT(t.topping_names SEPARATOR ',') AS topping_string FROM bascket AS b
LEFT JOIN toppings AS t ON t.pizza = b.pizza
GROUP BY pizza, topping_string "
上面的查询应该返回所有按其所选topping_字符串分组的比萨饼(应该返回唯一的比萨饼+toppings)。但这当然是无效的,因为分组是在分组之后完成的。因此,我看到的唯一替代方法是包装该查询并使其成为实际分组的子查询:
SELECT sub.* FROM (
SELECT b.pizza, GROUP_CONCAT(t.topping_names SEPARATOR ',') AS topping_string FROM bascket AS b
LEFT JOIN toppings AS t ON t.pizza = b.pizza
) AS sub
GROUP BY sub.pizza, sub.topping_string
这样做合适吗?还有其他选择吗?是的,这是正确的方法。如果要进行两次聚合,除了在子查询中执行第一次聚合之外,没有其他选择 但是,您没有任何聚合,因此可以使用
DISTINCT
强制唯一性:
SELECT DISTINCT
b.pizza,
GROUP_CONCAT(t.topping_names SEPARATOR ',') AS topping_string
FROM bascket AS b
LEFT JOIN toppings AS t
ON t.pizza = b.pizza
GROUP BY b.pizza;
注意:如果确实需要执行聚合,则子查询中缺少group by,应为:
SELECT sub.*, COUNT(*) AS Quantity FROM (
SELECT b.pizza, GROUP_CONCAT(t.topping_names SEPARATOR ',') AS topping_string
FROM bascket AS b
LEFT JOIN toppings AS t ON t.pizza = b.pizza
GROUP BY b.pizza
) AS sub
GROUP BY sub.pizza, sub.topping_string
实际的查询要大得多,这只是一个简单的基线问题示例。因此,我发现不能基于同一查询的分组结果进行分组。我会接受你的回答是的,我在子查询中注意到了分组。再次向泰求助。