Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 查询中的分组依据_Mysql_Sql_Group By - Fatal编程技术网

Mysql 查询中的分组依据

Mysql 查询中的分组依据,mysql,sql,group-by,Mysql,Sql,Group By,我对这个问题有点纠结。GROUP BY函数在此查询中不起作用。没有webshop组,它可以工作,但多个webshop显示。也许有人有主意了?谢谢 SELECT default_deals.id, default_deals.title, default_webshops.name, COUNT(default_deals_categories.categories_id) as category_count, default_webshops.popu

我对这个问题有点纠结。GROUP BY函数在此查询中不起作用。没有webshop组,它可以工作,但多个webshop显示。也许有人有主意了?谢谢

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;
但我敢打赌这不是你真正想看到的。如果你有多个网店,你想看什么?我的示例只是按字母顺序取最高值,但您可以将其放入列表中,例如Webshop1、Webshop2等

您还需要决定如何聚合webshop表中的其他字段。我的查询取popular和popular_顺序之和的最大值,但这只是一个示例


最后,这将增加两倍,三倍,等等。类别计数取决于一笔交易链接到多少个网店。。。我敢打赌这也不是你想要的?

你能分享一些数据来复制这个问题吗。查看查询,它看起来不错。不幸的是,它给出了相同的结果:哪个字段来自哪个表,例如,您为第一列default_deals.id指定了该字段,但没有为其他任何列指定该字段?还有,你到底看到了什么,你想看到什么?您的原始查询试图按结果中不包含的列进行分组,因此我将其取出,并将查询固定为按未聚合列进行分组。也许可以尝试将默认的_deals.webshop列添加回GROUP BY子句?它仍然返回多个webshop,每个webshop应该返回一个交易。我需要一个数据样本,当前显示的内容以及您希望显示的内容,以便能够进一步帮助您。我恐怕。。。