基于MySQL

时间:2017-08-17 08:51:46

标签: mysql mysql-workbench mysql-error-1064

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

MySQL table

我正在尝试根据SUM(运费)列检索已排序的数据。为此,我使用了以下查询。

选择ShipCountry 来自CountryDetails GROUP BY ShipCountry 按订单(运费)ASC

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

MySQL result

如果我运行以下查询,我会得到如下结果。没关系。

选择ShipCountry,ShipCity 来自CountryDetails GROUP BY ShipCountry,ShipCity 按订单(运费),ShipCity ASC

Results

而不是这个,我需要一个像下面这样的结果。按顺序,SUM(Freight)应仅考虑ShipCountry。它不应该同时考虑ShipCountry和ShipCity。我的预期结果是

Tableau's result

如何通过MySQL查询实现此结果?

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

选择ShipCountry,通过ShipCountry从Countrydetails组发货ShipCity,按SUM(SUM(货运))发货的ShipCity顺序(ShipCountry分区),Shipcity Asc。

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

2 个答案:

答案 0 :(得分:1)

您可以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

这将输出

  

阿根廷|布宜诺斯艾利斯

     

西班牙|波特兰

     

挪威|巴特,斯塔文

     

意大利|阿尔伯克基

     

葡萄牙|里斯本

     

波兰|埃尔金,西雅图,沃拉沃拉,华沙

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

答案 1 :(得分:1)

试试这个:

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 ;

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