【问题标题】:MySQL Query Count and JoinMySQL 查询计数和加入
【发布时间】:2016-03-04 17:17:51
【问题描述】:

我有以下疑问:

SELECT shipments.file_number, file_creation_date, city_name, container_sequence
FROM cities, countries, shipments
LEFT OUTER JOIN container_details ON shipments.file_number = container_details.file_number
WHERE
destination_ocean_port = city_code
AND cities.country_code = countries.country_code
AND cities.country_code = 'CN'
AND file_creation_date > '2015-1-1'
AND file_creation_date < '2016-1-1' 

ORDER BY shipments.file_number;

它会像这样返回:

正如您所见,在某些情况下,每个 file_number 有多个 container_sequence。我怎样才能得到它,所以它只返回每个 file_number 之一,同时显示每个 file_number 有多少个 container_sequences 的计数?

我知道它可能与 joins 和 count() 有关,但我无法弄清楚。

谢谢

【问题讨论】:

  • 试试 distinct(shipments.file_number),不知道是不是你想要的
  • 简单规则:从不FROM 子句中使用逗号。 始终使用明确的JOIN 语法。
  • 那有什么帮助呢?

标签: mysql sql join count


【解决方案1】:

您需要使用 count() group by 函数和 group by 子句来获得所需的输出。我还重写了连接以使用具有显式连接语法的内部连接。

SELECT shipments.file_number, file_creation_date, city_name, count(container_sequence) as number_of_containers
FROM cities 
INNER JOIN countries ON cities.country_code = countries.country_code
INNER JOIN shipments ON shipments.destination_ocean_port = cities.city_code
LEFT OUTER JOIN container_details ON shipments.file_number = container_details.file_number
WHERE 
    cities.country_code = 'CN'
AND file_creation_date > '2015-1-1'
AND file_creation_date < '2016-1-1' 
GROUP BY shipments.file_number, file_creation_date, city_name
ORDER BY shipments.file_number;

【讨论】:

    【解决方案2】:
    SELECT shipments.file_number, file_creation_date, city_name, count(container_sequence) as total_container_sequence
    FROM cities, countries, shipments
    LEFT OUTER JOIN container_details ON shipments.file_number = container_details.file_number
    WHERE
    destination_ocean_port = city_code
    AND cities.country_code = countries.country_code
    AND cities.country_code = 'CN'
    AND file_creation_date > '2015-1-1'
    AND file_creation_date < '2016-1-1' 
    GROUP BY shipments.file_number
    ORDER BY shipments.file_number;
    

    【讨论】:

    • 这取决于mysql配置是否有效。但绝对不是一个好习惯,让选择列表中的字段不在分组列表中,也不聚合。此外,您仍在对连接使用逗号语法,这可能会产生意想不到的副作用。
    猜你喜欢
    • 2012-06-18
    • 2015-05-29
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2016-03-05
    相关资源
    最近更新 更多