搜尋

首頁  >  問答  >  主體

Mysql中group by的問題。 。

Mysql中,下面這樣的寫法是可以允許的。但是嚴​​不嚴謹,支不支持這樣寫?有疑惑過不去這個坎,請大家幫忙看看。

select * from user group by user_name;
某草草某草草2752 天前726

全部回覆(9)我來回復

  • 怪我咯

    怪我咯2017-05-18 10:54:23

    最詳細的文件說明在官網上找到了。

    MySQL 5.7.5以上版本實作了函數依賴檢測。如果啟用 ONLY_FULL_GROUP_BY SQL 模式(預設),MySQL 將拒絕選擇清單、HAVING 條件或 ORDER BY 清單引用既未在 GROUP BY 子句中命名也不在功能上依賴它們的非聚合列的查詢。 (5.7.5之前,MySQL不偵測函數依賴,預設不啟用ONLY_FULL_GROUP_BY。有關5.7.5之前行為的描述,請參閱MySQL 5.6參考手冊。)

    來源:https://dev.mysql.com/doc/ref...

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-18 10:54:23

    select中的欄位需要在group by中強制寫出來
    select user_name from user group by user_name;

    http://blog.csdn.net/u2830560...

    回覆
    0
  • 怪我咯

    怪我咯2017-05-18 10:54:23

    首先理解下分組是個什麼概念,分組後可以達到什麼樣的效果;
    分組是為了按組這個屬性進行統計分析;
    例如一個學生表中,按性別分組,可以統計出男生多少人,女生多少人,女生多少人。
    在查詢結果列中,必然是sum,count等聚合函數組成。例如:
    select count(*),sex from student group by sex;
    如果是select * from user group by user_name;是想要得到一個什麼樣的統計結果呢?
    mysql5.6預設可以使用這種寫法select * from user group by user_name,但實際上在內部對語句做過轉換;
    mysql5.7以後預設不能使用此中寫法,會報錯。
    所以寫之前先想想我需要透過分組統計什麼內容,使用適合的聚合函數

    回覆
    0
  • 天蓬老师

    天蓬老师2017-05-18 10:54:23

    在SQL語句中使用GROUP BY要注意三點
    1:不能使用別名;
    2:除了函數字段,select中出現的字段都必須出現在group by中,
    3:別名不能使用保留字
    這三點MYSQL都是沒有要求的!
    我們再來看你這個語句,如果user表只有一個字段user_name ,那麼這個語句沒有問題,
    如果user表有超過一個字段,那麼這個語句在mysql是沒有問題的,但是在oracle和sqlserver是有問題的

    回覆
    0
  • 怪我咯

    怪我咯2017-05-18 10:54:23

    雷雷

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-18 10:54:23

    如果存在user_name這個字段,那麼就沒有問題。 group by是按欄位分組,通常和聚合函數一起使用,像你這個sql也是可以執行的。只不過user_name通常都是唯一的,按唯一欄位去分組是沒有意義的。

    回覆
    0
  • 黄舟

    黄舟2017-05-18 10:54:23

    這個屬於mysql的特殊功能支持,如@xuexiphpa所說,可以透過參數關掉。

    但不建議使用,group by分組後,理論上傳回的記錄數比分組前少了,一般會透過聚合函數來傳回一些統計資料。
    直接使用select *,就不確認回傳的是那一筆記錄了。

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-18 10:54:23

    一般個聚合函數結合用的比較多

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-18 10:54:23

    group by聚合分組後,select子句中的元素最好只保持:
    1、常數
    2、group by指定的列名
    3、聚合函數,如count()、avg()、sum( *)等等

    你這樣*的結果,只列出了每一個分組的一筆記錄,而且不知道是第一個還是隨機的一個值

    回覆
    0
  • 取消回覆