原創(chuàng) 2017年03月21日 16:55:39
今天在執(zhí)行MySQL中sql語句的時候報錯了,執(zhí)行的sql語句:
SELECT
prov_desc,
area_desc,
month_id,
MAX(total_fee)AS max_total,
FROM
sss
WHERE
prov_id = '075'
OR prov_id IN('017')
AND month_id IN('201207')
GROUP BY
prov_id,
prov_desc,
prov_ord,
area_desc,
area_ord
HAVING
MAX(total_fee)> 100
ORDER BY
prov_ord DESC,
area_ord
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
錯誤提示如下:
Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'sss.month_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
? 認真看錯誤的提示發(fā)現(xiàn)是在group by中的字段比較selelct中的字段差了一個month_id, 而正好是month_id報錯。this is incompatible with sql_mode=only_full_group_by
這句話提示了這違背了mysql的規(guī)則,only fully group by,也就是說在執(zhí)行的時候先分組,根據(jù)查詢的字段(select的字段)在分組的內(nèi)容中取出,所以查詢的字段全部都應(yīng)該在group by分組條件內(nèi);一種情況例外,查詢字段中如果含有聚合函數(shù)的字段不用包含在group by中,就像我上面的MAX(total_fee),至于為什么,我也不抬明白。
? 后來發(fā)現(xiàn)Order by排序條件的字段也必須要在group by內(nèi),看此大神的博文解釋之后豁然開朗,排序的字段也是從分組的字段中取出。 不明白的可以去看一下。
解決辦法:select字段必須都在group by分組條件內(nèi)(含有函數(shù)的字段除外)。(如果遇到order by也出現(xiàn)這個問題,同理,order by字段也都要在group by內(nèi))。