Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-可能的解决方案;按组分组“concat()”;?_Mysql_Sql_Group By - Fatal编程技术网

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  

实际的查询要大得多,这只是一个简单的基线问题示例。因此,我发现不能基于同一查询的分组结果进行分组。我会接受你的回答是的,我在子查询中注意到了分组。再次向泰求助。