根据 MySQL 中的一个数字列检索排序数据

Retrieve sorted data based on one numeric column in MySQL

我在 MySQL 数据库中有一个 table 喜欢的附加图像。

我正在尝试检索基于 SUM(freight) 列的排序数据。为此,我使用了以下查询。

SELECT 船舶国家 来自国家详情 按船舶国家分组 ORDER BY SUM(运费) ASC

当我 运行 时,我得到如下结果。

如果我 运行 下面的查询我得到如下结果。还好。

SELECT ShipCountry, ShipCity 来自国家详情 按 ShipCountry、ShipCity 分组 ORDER BY SUM(运费), ShipCity ASC

我需要的不是这个结果,如下所示。按条款排序 SUM(Freight) 应仅考虑 ShipCountry。它不应同时考虑 ShipCountry 和 ShipCity。我的预期结果是

如何通过MySQL查询得到这个结果?

在SQL中我们可以实现如下查询。

Select ShipCountry,ShipCity 来自 Countrydetails group by ShipCountry,ShipCity Order by SUM(SUM(freight)) over(partition by ShipCountry),Shipcity Asc.

我们在 MySQL 中需要这样的等效查询。

您可以GROUP BY ShipCountryGROUP_CONCAT以下城市

SELECT
    ShipCountry,
    GROUP_CONCAT(ShipCity ORDER BY ShipCity ASC) AS cities,
    SUM(freight) AS total_country_freight
FROM
    Countrydetails
GROUP BY
    ShipCountry
ORDER BY
    total_country_freight ASC

这将输出

Argentina | Buenos Aires

Spain | Portland

Norway | Butte, Stavern

Italy | Albuquerque

Portugal | Lisboa

Poland | Elgin, Seattle, Walla Walla, Warszawa

显示时,您可以用逗号分隔字符串并打印您期望的输出。

试试这个:

SELECT t1.ShipCountry, t1.ShipCity, t2.countrysum FROM CountryDetails t1 
  join ( select ShipCountry, SUM(freight) countrysum from CountryDetails 
       group by ShipCountry )
  as t2 on t1.ShipCountry = t2.ShipCountry 
GROUP BY ShipCountry, ShipCity 
ORDER BY countrysum ASC ;

它包含一个子查询,但应该为每个国家/地区对生成单独的一行。