天天看點

mysql 分組求平均值_統計知識——交叉分組表

最近在學習統計學基礎,同使用Excel和MySQL做練習題。接觸到交叉分組表,如果使用Excel可以使用資料透視表進行組合交叉分組表,但在MySQL中如何建立呢?

交叉分組表

交叉分組表是一種常用的分類彙總表格,可以顯示多變量之間的關系。其表格形式的行和列标簽為一個或多個變量。

舉個例子,下面資料為300家飯店的品質等級和餐價:

mysql 分組求平均值_統計知識——交叉分組表

300家飯店品質等級和餐價(部分)

在該資料中,對品質等級和餐價繪制交叉分組表。在Excel中使用資料透視表,将品質等級設為行、餐價設為列,對飯店數量進行值計數統計,并對餐價字段進行組合分組,結果如下:

mysql 分組求平均值_統計知識——交叉分組表

該表中,品質等級變量作為表格的行,餐價作為表格的列。

我們知道了如何使用Excel繪制交叉分組表,但在MySQL中如何查詢提取交叉表呢?

行轉列

繪制交叉表,需要将其中一個變量轉換為列,故應該了解資料的行轉列的操作。

1、使用CASE WHEN ... ... TEHN ... ELSE ... END進行轉換

CASE是條件分支語句,當字段中對應行的值滿足某個條件則執行語句。

拿上述的資料,對字段餐價進行分組,組名為每列的列名,分組情況為10~19、20~29... ... 。如果餐價滿足10~19,傳回1,否則傳回0,依次類推;

SELECT 
       
           
mysql 分組求平均值_統計知識——交叉分組表

分組結果

2、使用IF()進行行轉列

使用IF()可以得到CASE語句一樣的效果,而且比CASE語句更加簡潔。

SELECT 
       
           

注意:上面使用SUM函數是為了對每個組進行頻數統計,也可以使用其他函數進行其它計算。比如,可以将SUM()改為AVG()對餐價字段進行求平均值。

交叉表

在将對一個字段進行行變列的基礎上,對另一個字段進行分組。簡單的操作是,在原來行變列的基礎上,再加一句GROUP BY,便可以實作交叉表的查詢。

SELECT 
           
mysql 分組求平均值_統計知識——交叉分組表

交叉分組表

交叉分組表常用于研究兩個字段或多個之間的關系。比如,不同城市之間不同職業的薪資水準、不同年齡段的不同性别的消費水準等等。