mysql - 按总列中的最低值排序,按年份,并在另一列上使用 GROUP BY

标签 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

最佳答案

试试这个:

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;

关于mysql - 按总列中的最低值排序,按年份,并在另一列上使用 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810261/

相关文章:

mysql - 使用 MEDIUMTEXT 和页面的 mySQL 中的数据丢失

MySQL Select 查询以根据列表值获取记录

java - 在处理保存到具有关系的数据库的对象时,您是加载整个对象还是只加载 id?

MySql 只更新其中一条重复记录

sql - 使用 GROUP BY 只显示每个用户最新更新的行

mysql - 按工作日分组

mysql - 在子查询中使用 GROUP_CONCAT 和 JOIN

php - 如何使用 codeigniter 中的查询生成器类来缩短此查询

mysql - 使用 "insert into' 查询时出现“未选择数据库”错误

mysql - SQL 查询多个表,具有多个联接和带有逗号分隔列表的列字段