为什么我从 SQL 查询中删除 GROUP BY 语句后会收到此错误消息?

Why am I obtaining this error message removing the GROUP BY statment from a SQL query?

我不太喜欢 SQL,我对这个 MySql 查询有以下疑问:

SELECT x.*
  FROM Market_Commodity_Price_Series x
  JOIN 
     ( 
     /**
                RETURN THE LATEST INFO:
     **/
        SELECT measure_unit_id 
            , currency_id 
            , market_commodity_details_id
            , MAX(price_date) price_date
         FROM Market_Commodity_Price_Series  AS MCPS 
         INNER JOIN MarketDetails_CommodityDetails AS MD_CD ON MCPS.market_commodity_details_id = MD_CD.id
         INNER JOIN MarketDetails AS MD ON MD_CD.market_details_id = MD.id 
         INNER JOIN CommodityDetails AS CD ON MD_CD.commodity_details_id = CD.id
         WHERE MD.id = 4
         AND CD.id = 4
        GROUP BY measure_unit_id, currency_id, market_commodity_details_id
     ) y
    ON y.measure_unit_id = x.measure_unit_id
   AND y.currency_id = x.currency_id
   AND y.market_commodity_details_id = x.market_commodity_details_id
   AND y.price_date = x.price_date;

为什么要删除 GROUP BY measure_unit_id, currency_id, market_commodity_details_id 声明从加入 "table" 我得到以下错误信息?

#42000In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'digital_services_DB.MCPS.measure_unit_id'; this is incompatible with sql_mode=only_full_group_by

这就是 SQL 语言的定义方式。

如果您 select 除了任何非聚合之外还有任何聚合(SUM、MAX 等),您必须在所有非聚合列上包含 GROUP BY 子句。

每当您 运行 聚合查询(例如 SUM、MAX、MIN...)时 SQL 需要按未聚合的列对所有结果进行分组。因此,它要求您对所有未聚合的列进行 GROUP BY。在您的情况下,这将是 measure_unit_id、currency_id 和 market_commodity_details_id。

您试图通过删除 GROUP BY 来达到什么目的?