我的表格如下:
使用以下查询在表格(前端)中输出此数据:
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年时,它也没有返回正确的订单。只返回2012年的正确订单。我认为这里发生的事情是,它只在它找到的第一年返回正确的数据,而不是所有其他年份,它返回NULL,这就是在更大的年份的顺序比2012年(最低年份),但不知道如何解决这个问题。
这是我正在尝试使用此查询实现的图片,您可以在其中单击每列的标题,并按年按升序或降序排序:
答案 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
声明!感谢你们所有人的努力!