mysql - 查询中的 GROUP BY

标签 mysql sql group-by

我对这个查询有点困惑。 GROUP BY 函数在此查询中不起作用。如果没有网上商店组,它可以工作,但可以显示多个网上商店。也许有人有想法吗?谢谢!

SELECT 
    default_deals.id, 
    default_deals.title,
    default_webshops.name,
    COUNT(default_deals_categories.categories_id) as category_count,
    default_webshops.popular,
    default_webshops.popular_order
FROM 
    default_deals
    JOIN default_deals_categories ON default_deals.id = default_deals_categories.row_id
    JOIN default_webshops ON default_deals.webshop = default_webshops.id
WHERE 
    categories_id IN (1, 2)
GROUP BY 
    default_deals.id, 
    default_deals.title,
    default_webshops.name,
    default_webshops.popular,
    default_webshops.popular_order
ORDER BY 
    category_count DESC, 
    default_webshops.popular DESC, 
    default_webshops.popular_order DESC

最佳答案

试试这个:

SELECT 
    default_deals.id, 
    title,
    name,
    COUNT(categories_id) as category_count,
    popular,
    popular_order
FROM 
    default_deals
    JOIN default_deals_categories ON default_deals.id = default_deals_categories.row_id
    JOIN default_webshops ON default_deals.webshop = default_webshops.id
WHERE 
    categories_id IN (1, 2)
GROUP BY 
    default_deals.id, 
    title,
    name,
    popular,
    popular_order
ORDER BY 
    category_count DESC, 
    popular DESC, 
    popular_order DESC

好吧,我想您的结果中,每个已链接到的网上商店都列出了多次交易,然后相同的类别计数,但流行和流行订单的值可能不同?您需要做的是决定如何聚合这些字段。例如,您可以这样做:

SELECT 
    dd.id, 
    dd.title,
    MAX(dw.name) AS webshop_name,
    COUNT(dc.categories_id) AS category_count,
    MAX(dw.popular) AS popular,
    SUM(dw.popular_order) AS popular_order
FROM 
    default_deals dd
    JOIN default_deals_categories dc ON dd.id = dc.row_id
    JOIN default_webshops dw ON dd.webshop = dw.id
WHERE 
    dc.categories_id IN (1, 2)
GROUP BY
    dd.id, 
    dd.title
ORDER BY 
    COUNT(dc.categories_id) DESC, 
    MAX(dw.popular) DESC, 
    SUM(dw.popular_order) DESC;

但我敢打赌这不是你真正想看到的。如果您有多个网上商店,您想看到什么?我的示例只是按字母顺序取最高值,但您可以将其放入列表中,例如“网上商店1,网上商店2”等。

您还需要决定如何聚合网上商店表中的其他字段。我的查询采用流行的最大值和流行_订单的总和,但这只是一个示例。

最后,这将增加一倍、三倍等等。类别计数取决于交易链接到的网上商店数量......我敢打赌,这也不是您想要的?

关于mysql - 查询中的 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26503331/

相关文章:

mysql - mysql5.5中如何统计json?

php - Mysql 表在云 9 中未显示为 html 表

mysql - SQL LIKE 仅在表的一行上搜索错误

javascript - 需要按多选值数组进行分组

python - 带有 Groupby 的 Pandas 滚动函数

MySQL - 按选择中选择的结果进行分组

Mysql计算一个count(*)的中值与一个group by some field

mysql - "from"在这个位置无效,期待: EOF, ";"

c++ - 无法通过 odbc 连接到 Microsoft Azure 数据库

mysql - 如何统计和分组查询以获得正确的结果?