mysql精粹 group by 中很好的函式

2021-05-23 07:49:59 字數 3258 閱讀 9824

1group_concat

mysql>select student_name,

->group_concat(test_score)

->from student

->group by student_name;

or:

mysql>select student_name,

->group_concat(distinct test_score

->order by test_score desc separator ' ')

->from student

->group by student_name;

ps:就是可以在乙個語句中得到 group by 被 聚合的項的每個子值的乙個組合的字串

2with rollup

group by子句允許乙個將額外行新增到簡略輸出端 with rollup 修飾符。這些行代表高層(或高聚集)簡略操作。rollup 因而允許你在多層分析的角度回答有關問詢的問題

或者你可以使用 rollup, 它能用乙個問詢提供雙層分析。將乙個 with rollup修飾符新增到group by 語句,使詢問產生另一行結果,該行顯示了所有年份的總價值:

mysql>select year, sum(profit) from sales group by year with rollup;

| year | sum(profit) |

| 2000 |        4525 |

| 2001 |        3010 |

| null |        7535 |

總計高聚集行被年份列中的null值標出。

當有多重 group by 列時,rollup產生的效果更加複雜。這時,每次在除了最後乙個分類列之外的任何列出現乙個 「break」 (值的改變) ,則問訊會產生乙個高聚集累計行。

例如,在沒有 rollup的情況下,乙個以年、國家和產品為基礎的關於 sales 表的一覽表可能如下所示:

mysql>select year, country, product, sum(profit)

->from sales

->group by year, country, product;

| year | country | product    | sum(profit) |

| 2000 | finland | computer   |        1500 |

| 2000 | finland | phone      |         100 |

| 2000 | india   | calculator |         150 |

| 2000 | india   | computer   |        1200 |

| 2000 | usa     | calculator |          75 |

| 2000 | usa     | computer   |        1500 |

| 2001 | finland | phone      |          10 |

| 2001 | usa     | calculator |          50 |

| 2001 | usa     | computer   |        2700 |

| 2001 | usa     | tv         |         250 |

表示總值的輸出結果僅位於年/國家/產品的分析級別。當新增了 rollup後, 問詢會產生一些額外的行:

mysql>select year, country, product, sum(profit)

->from sales

->group by year, country, product with rollup;

| year | country | product    | sum(profit) |

| 2000 | finland | computer   |        1500 |

| 2000 | finland | phone      |         100 |

| 2000 | finland | null       |        1600 |

| 2000 | india   | calculator |         150 |

| 2000 | india   | computer   |        1200 |

| 2000 | india   | null       |        1350 |

| 2000 | usa     | calculator |          75 |

| 2000 | usa     | computer   |        1500 |

| 2000 | usa     | null       |        1575 |

| 2000 | null    | null       |        4525 |

| 2001 | finland | phone      |          10 |

| 2001 | finland | null       |          10 |

| 2001 | usa     | calculator |          50 |

| 2001 | usa     | computer   |        2700 |

| 2001 | usa     | tv         |         250 |

| 2001 | usa     | null       |        3000 |

| 2001 | null    | null       |        3010 |

| null | null    | null       |        7535 |

limit可用來限制返回客戶端的行數。limit 用在 rollup後面, 因此這個限制 會取消被rollup新增的行

mysql中group by 用法簡介

sql語句group by 用法簡介 經常很多情況下,我們用來做統計的資料表都是無比雜亂的,凡是每一條資料都是無厘頭的往裡插入,但是我們在按照分類或者分組來顯示統計資料的時候,這個時候就要用到神奇的group by,如下 基本語法 select 欄位1 sum 欄位2 from 名 group by...

Mysql 利用group by 分組排序

mysql的group by與oracle有所不同,查詢得字段可以不用寫聚合函式,查詢結果取得是每一組的第一行記錄。利用上面的特點,可以利用mysql實現一種獨特的排序 首先先按某個字段進行order by,然後把有順序的表進行分組,這樣每組的成員都是有順序的,而mysql預設取得分組的第一行。從而...

mysql 減少group by 的開銷

group by 一般 和集合函式一起使用,使用情況最多的 是count 即將 資料按照一定條件分組,再統計每一組的總數,顯然這是非常消耗資源的一種做法.mysql 36軍規裡 表示盡量少使用 count 也是這個原因.如果想對多種條件進行 統計 可以使用 判斷語句 如sum if sum cses...