第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SELECT子句中不存在聚合函數(shù)時的GROUP BY行為

SELECT子句中不存在聚合函數(shù)時的GROUP BY行為

肥皂起泡泡 2019-10-11 10:04:04
我有一個emp具有以下結(jié)構(gòu)和數(shù)據(jù)的表:name   dept    salary-----  -----   -----Jack   a       2Jill   a       1Tom    b       2Fred   b       1當我執(zhí)行以下SQL:SELECT * FROM emp GROUP BY dept我得到以下結(jié)果:name   dept    salary-----  -----   -----Jill   a       1Fred   b       1服務器是基于什么決定決定返回吉爾和弗雷德,并排除杰克和湯姆?我在MySQL中運行此查詢。注意1:我知道查詢本身沒有任何意義。我正在嘗試調(diào)試“ GROUP BY”方案的問題。我試圖了解用于此目的的默認行為。注2:我習慣于編寫與GROUP BY子句相同的SELECT子句(減去聚合字段)。當我遇到上述行為時,我開始懷疑我是否可以在以下情況下依賴此行為:從emp表中選擇薪水在部門中最低/最高的行。例如:這樣的SQL語句可在MySQL上運行:SELECT A.*, MIN(A.salary) AS min_salary FROM emp AS A GROUP BY A.dept我找不到任何描述這種SQL為何起作用的材料,更重要的是,如果我能夠始終如一地依靠這種行為的話。如果這是可靠的行為,那么我可以避免類似以下的查詢:SELECT A.* FROM emp AS A WHERE A.salary = (             SELECT MAX(B.salary) FROM emp B WHERE B.dept = A.dept)
查看完整描述

3 回答

?
慕標5832272

TA貢獻1966條經(jīng)驗 獲得超4個贊

在這一點上閱讀MySQL文檔。


簡而言之,MySQL出于性能考慮,允許從GROUP BY中刪除某些列,但是,只有在被省略的列都具有相同值(在分組內(nèi))的情況下,此方法才有效,否則,查詢返回的值的確是不確定的,例如在這篇文章中被其他人正確猜到了。確保添加ORDER BY子句不會重新引入任何形式的確定性行為。


盡管不是問題的核心,但本示例說明如何使用*而不是對所需列進行顯式枚舉通常是一個壞主意。


摘自MySQL 5.0文檔:


使用此功能時,每個組中的所有行應具有相同的值

對于GROUP BY部分中省略的列。服務器是免費的

從組中返回任何值,因此結(jié)果是不確定的,除非

所有值都相同。 


查看完整回答
反對 回復 2019-10-11
?
至尊寶的傳說

TA貢獻1789條經(jīng)驗 獲得超10個贊

這有點晚了,但我會提出來供將來參考。


GROUP BY接收具有重復項的第一行,并丟棄結(jié)果集中第二行之后的所有匹配行。因此,如果杰克和湯姆具有相同的部門,則在普通SELECT中首先出現(xiàn)的人將是GROUP BY中的結(jié)果行。


如果要控制列表中第一個出現(xiàn)的內(nèi)容,則需要執(zhí)行ORDER BY。但是,SQL不允許ORDER BY出現(xiàn)在GROUP BY之前,因為它將引發(fā)異常。解決此問題的最佳方法是在子查詢中執(zhí)行ORDER BY,然后在外部查詢中執(zhí)行GROUP BY。這是一個例子:


SELECT * FROM (SELECT * FROM emp ORDER BY name) as foo GROUP BY dept

這是我發(fā)現(xiàn)的性能最好的技術(shù)。我希望這可以幫助某人。


查看完整回答
反對 回復 2019-10-11
?
慕容708150

TA貢獻1831條經(jīng)驗 獲得超4個贊

我發(fā)現(xiàn)最好的辦法是考慮不支持這種類型的查詢。在大多數(shù)其他數(shù)據(jù)庫系統(tǒng)中,不能在GROUP BY子句中或HAVING,SELECT或ORDER BY子句中的聚合函數(shù)中都不包含列。


相反,請考慮您的查詢讀?。?/p>


SELECT ANY(name), dept, ANY(salary)

FROM emp 

GROUP BY dept;

...因為這是怎么回事。


希望這可以幫助....


查看完整回答
反對 回復 2019-10-11
  • 3 回答
  • 0 關(guān)注
  • 1027 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號