按总栏数的最低值排序,按年份在另一列

时间:2017-06-28 18:42:45

标签: mysql group-by group-concat

我的表格如下:

wp_infraexchange_market_pivots table

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

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
    LIMIT 20;

这为我提供了如下输出:

query result

但是,我需要输出相同的数据,但是在给定年份中以最低总数排序的行。因此,如果我想从2012年的最低total列中获取结果,并按ASC顺序排序,我该如何在MySQL查询中执行此操作?这甚至可能吗?

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

enter image description here

这看起来非常接近我的需要,但我仍然需要GROUP_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年的正确订单。我认为这里发生的事情是,它只在它找到的第一年返回正确的数据,而不是所有其他年份,它返回NULL,这就是在更大的年份的顺序比2012年(最低年份),但不知道如何解决这个问题。

这是我正在尝试使用此查询实现的图片,您可以在其中单击每列的标题,并按年按升序或降序排序:

enter image description here

3 个答案:

答案 0 :(得分:1)

试试这个:

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;

答案 1 :(得分:1)

可能需要多年和最小(总)的订单

    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 GROUP_CONCAT(year), min(total),  totals_sum DESC
    LIMIT 20;

答案 2 :(得分:0)

谢谢大家,但我这样想出来就像魅力一样:

ADD_CUSTOM_COMMAND(
    TARGET ${PROJECT_NAME}
    PRE_BUILD
    COMMAND ${CMAKE_COMMAND} -E tar cvf ${ZIP_OUT_DIR}/my_archive.zip --format=zip -- .
    WORKING_DIRECTORY ${FOLDER_TO_ZIP}/another_folder
)

这将结果(保持开发人员的独特性)在2016年从最低到最高的所有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; 进行排序。现在我可以简单地删除2016年并放入任何一年,如果我想获得最高为了最低,我只需将total更改为ORDER BY MIN(year_total) ASC,一切都很完美!

猜猜,这里需要ORDER BY MAX(year_total) DESC声明!感谢你们所有人的努力!