是否可以根据聚合函数的结果对结果进行分组,而不将结果嵌套在其上?
"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_string分组的所有比萨(应该返回唯一的pizza+toppings)。但是当然,这是无效的,因为group_concat是在分组之后完成的。因此,我看到的唯一选择是包装该查询并使其成为实际分组的子查询:
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
这样做合适吗?还有别的选择吗?
发布于 2014-02-10 02:00:49
是的,这是正确的方法,如果您正在执行两个聚合,除了在子查询中执行第一个聚合之外,别无选择。
但是,您没有任何聚合,因此可以使用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;
注:如果您确实需要在子查询中执行聚合,则应该是:
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
https://stackoverflow.com/questions/21673706
复制相似问题