按总计列中的最低值排序,按年份在另一列上使用 GROUP BY
Order By Lowest Value in total column, by year with GROUP BY on another column
我的 Table 如下所示:
我正在使用以下查询在 table (front-end) 中输出此数据:
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;
这给我的输出如下所示:
但是,我需要输出相同的数据,但行按给定年份的最低总数排序。因此,如果我想获得从 2012 年最低 total
列开始排序的结果,并按 ASC 顺序对其进行排序,我该如何在 MySQL 查询中执行此操作?这可能吗?
@scais - 已尝试您的回答,但得到以下结果:
这看起来非常接近我的需要,但我仍然需要 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 年时,它 return 顺序不正确。只有 return 是 2012 年的正确顺序。我认为这里发生的是它 return 仅在它发现的第一年的正确数据,而不是所有其他年份,它 return s NULL,这打乱了大于 2012 年(最低年份)的年份顺序,但不确定如何解决此问题。
这是我试图通过此查询实现的图片,您可以在其中单击每列的 header 并按年份按升序或降序排列:
试试这个:
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 GROUP_CONCAT(year), min(total), totals_sum DESC
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;
这会将 2016 年所有 total
中的结果按升序从低到高排序(保持开发者唯一)。现在我可以简单地删除 2016 年并放入任何一年,如果我想从最高到最低,我只是将 ORDER BY MIN(year_total) ASC
更改为 ORDER BY MAX(year_total) DESC
,一切都很完美!
猜猜,这里需要一个 CASE
声明!感谢大家的努力!
我的 Table 如下所示:
我正在使用以下查询在 table (front-end) 中输出此数据:
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;
这给我的输出如下所示:
但是,我需要输出相同的数据,但行按给定年份的最低总数排序。因此,如果我想获得从 2012 年最低 total
列开始排序的结果,并按 ASC 顺序对其进行排序,我该如何在 MySQL 查询中执行此操作?这可能吗?
@scais - 已尝试您的回答,但得到以下结果:
这看起来非常接近我的需要,但我仍然需要 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 年时,它 return 顺序不正确。只有 return 是 2012 年的正确顺序。我认为这里发生的是它 return 仅在它发现的第一年的正确数据,而不是所有其他年份,它 return s NULL,这打乱了大于 2012 年(最低年份)的年份顺序,但不确定如何解决此问题。
这是我试图通过此查询实现的图片,您可以在其中单击每列的 header 并按年份按升序或降序排列:
试试这个:
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 GROUP_CONCAT(year), min(total), totals_sum DESC
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;
这会将 2016 年所有 total
中的结果按升序从低到高排序(保持开发者唯一)。现在我可以简单地删除 2016 年并放入任何一年,如果我想从最高到最低,我只是将 ORDER BY MIN(year_total) ASC
更改为 ORDER BY MAX(year_total) DESC
,一切都很完美!
猜猜,这里需要一个 CASE
声明!感谢大家的努力!