Mysql 按“总计”列中的最低值排序,按年份排序,并在另一列中按分组

Mysql 按“总计”列中的最低值排序,按年份排序,并在另一列中按分组,mysql,group-by,group-concat,Mysql,Group By,Group Concat,我的表格如下所示: Am使用以下查询在表(前端)中输出此数据: 这给我的输出如下所示: 但是,我需要输出相同的数据,但行是按给定年份中最低的总数排序的。因此,如果我想从2012年最低的total列中获得排序结果,并按ASC顺序排序,我如何在MySQL查询中做到这一点?这可能吗 @scais-已尝试您的答案,但我得到以下结果: 这看起来非常接近我所需要的,但我仍然需要组的CONCAT来工作 好的,切换到SELECT中的CASE语句,它几乎可以正常工作 SELECT developer, GR

我的表格如下所示:

Am使用以下查询在表(前端)中输出此数据:

这给我的输出如下所示:

但是,我需要输出相同的数据,但行是按给定年份中最低的总数排序的。因此,如果我想从2012年最低的
total
列中获得排序结果,并按ASC顺序排序,我如何在MySQL查询中做到这一点?这可能吗

@scais-已尝试您的答案,但我得到以下结果:

这看起来非常接近我所需要的,但我仍然需要
组的CONCAT
来工作

好的,切换到SELECT中的CASE语句,它几乎可以正常工作

SELECT developer, GROUP_CONCAT(year) AS years, GROUP_CONCAT(total) AS totals, SUM(IFNULL(total, 0)) AS totals_sum, 
CASE WHEN year = 2013 
    THEN total 
    ELSE NULL 
END AS year_total
        FROM wp_infraexchange_market_pivots
        WHERE market_id = 2
        GROUP BY developer
        ORDER BY year_total ASC
        LIMIT 20;
上面输出的是2012年的正确订单和数据,但如果我将其更改为2013年,则无法获得正确的订单。不知道为什么。但订单有缺陷,当我将其更改为2015年、2016年时,它也没有返回正确的订单。仅返回2012年的正确订单。我认为这里发生的事情是,它只在发现的第一年返回正确的数据,与所有其他年份相比,它返回空值,这扰乱了大于2012年(最低年份)的年份顺序,但不确定如何解决这一问题

下面是一张我试图通过此查询实现的图片,您可以单击每个列的标题,并按年份按升序或降序排列:

试试这个:

SELECT developer, GROUP_CONCAT(year) AS years, GROUP_CONCAT(total) AS totals, SUM(IFNULL(total, 0)) AS totals_sum
    FROM wp_infraexchange_market_pivots
    WHERE market_id = 2
    GROUP BY developer
    ORDER BY totals_sum DESC, years ASC
    LIMIT 20;
试试这个:

SELECT developer, GROUP_CONCAT(year) AS years, GROUP_CONCAT(total) AS totals, SUM(IFNULL(total, 0)) AS totals_sum
    FROM wp_infraexchange_market_pivots
    WHERE market_id = 2
    GROUP BY developer
    ORDER BY totals_sum DESC, years ASC
    LIMIT 20;

可能是您需要订购年和分钟(总计)


可能是您需要订购年和分钟(总计)


谢谢大家,但我是这样想的,而且很有魅力:

SELECT developer, GROUP_CONCAT(year) AS years, GROUP_CONCAT(total) AS totals, SUM(IFNULL(total, 0)) AS totals_sum, CASE WHEN year = 2016 THEN total ELSE NULL END AS year_total
    FROM wp_infraexchange_market_pivots
    WHERE market_id = 2
    GROUP BY developer
    ORDER BY MIN(year_total) ASC
    LIMIT 20;
这将按升序对结果进行排序(保持开发人员的唯一性),所有
total
在2016年从最低到最高。现在我可以简单地删除2016年并放入任何年份,如果我想从最高到最低,我只需将
订单按最小值(年总数)ASC更改为
订单按最大值(年总数)DESC,一切都很完美


猜猜,这里需要一个
案例
陈述!谢谢你们的努力,伙计们

谢谢大家,但我是这样想的,而且很有魅力:

SELECT developer, GROUP_CONCAT(year) AS years, GROUP_CONCAT(total) AS totals, SUM(IFNULL(total, 0)) AS totals_sum, CASE WHEN year = 2016 THEN total ELSE NULL END AS year_total
    FROM wp_infraexchange_market_pivots
    WHERE market_id = 2
    GROUP BY developer
    ORDER BY MIN(year_total) ASC
    LIMIT 20;
这将按升序对结果进行排序(保持开发人员的唯一性),所有
total
在2016年从最低到最高。现在我可以简单地删除2016年并放入任何年份,如果我想从最高到最低,我只需将
订单按最小值(年总数)ASC更改为
订单按最大值(年总数)DESC,一切都很完美



猜猜,这里需要一个
案例
陈述!谢谢你们的努力,伙计们

如果给我一年的时间,我需要按
total
列订购,以从中获得最低的
total
。我不认为这一年是我需要订购的,但也许我的想法是错误的。不过,我现在要测试一下,只是为了确定。@Solomon Closson只需更改您希望订购的列的
年数
。不,输出不好。我仍然需要现有的数据,我只需要按
2012
年中最低的
total
值按升序排列的行。我无法按
年进行分组,因为它会引发错误。如果我按
年分组,开发者
效果会更好,但现在我只得到1年的回报。谢谢,但我最终用我的答案解决了这个问题+但是,我需要按
total
列订购,如果给我一年的时间,我需要从中获得最低的
total
。我不认为这一年是我需要订购的,但也许我的想法是错误的。不过,我现在要测试一下,只是为了确定。@Solomon Closson只需更改您希望订购的列的
年数
。不,输出不好。我仍然需要现有的数据,我只需要按
2012
年中最低的
total
值按升序排列的行。我无法按
年进行分组,因为它会引发错误。如果我按
年分组,开发者
效果会更好,但现在我只得到1年的回报。谢谢,但我最终用我的答案解决了这个问题+1为您尝试。这看起来是订购它正确,但是,我想知道我是否可以订购一年,而不是我投入?而且,
组的CONCAT
现在似乎不起作用。编辑答案以显示结果。是否可以使
组保持工作状态?如果返回更多的列,这对我来说没问题,只要它可以保持其他列的值。。不使用别名。。但直接按顺序分组。。让我知道。。。该查询应显示集团(年度),而不是一年。这是一个奇怪的更新问题,我相信现在需要一个
案例
声明。但我的案例只在2012年有效,其他年份无效。可能需要在案例或其他方面的专栏上进行分组吗?谢谢,但我最终找到了答案,将其作为答案发布了出来+感谢你的努力。干杯:)看起来它的订购方式是正确的,但是,我想知道我是否可以用我投入的一年来代替它?而且,
组的CONCAT
现在似乎不起作用。编辑答案以显示结果。是否可以使
组保持工作状态?如果返回更多的列,这对我来说没问题,只要它可以保持其他列的值。。不使用别名。。但直接按顺序分组。。让我知道。。。该查询应显示集团(年度),而不是一年。这是一个奇怪的更新问题,我相信现在需要一个
案例
声明。但我的案例只在2012年有效,其他年份无效。可能需要在案例中的列上做一组什么的