首頁 > 軟體

mysql如何統計同一欄位不同值的個數

2022-12-01 14:01:58

在一個專案中,製作呃echart圖表的時候,遇到一個需求,需要從後端介面獲取資料----售票員的姓名和業績

所以需要在訂單表中,獲取不同售票員的訂單數量。

訂單表


解決方案彙總

MySQL 統計一個列中不同值的數量

需求:

MySQL 統計一個列中不同值的數量,其中 origin 是使用者來源,其中的值有 iPhone 、Android 、Web 三種,現在需要分別統計由這三種渠道註冊的使用者數量。

方案1

SELECT count(*)
FROM user_operation_log
WHERE origin = 'iPhone';
 
SELECT count(*)
FROM user_operation_log
WHERE origin = 'Android';
 
SELECT count(*)
FROM user_operation_log
WHERE origin = 'Web';

用 where 語句分別統計各自的數量。

這樣查詢的量有點多了,如果這個值有 10 個呢,那還得寫 10 條相似的語句,很麻煩。

方案2

第一種寫法(用 count 實現)

SELECT
  count(origin = 'iPhone' OR NULL)  AS iPhone,
  count(origin = 'Android' OR NULL) AS Android,
  count(origin = 'Web' OR NULL)     AS Web
FROM user_operation_log;

第二種寫法(用 sum 實現)

SELECT
  sum(if(origin = 'iPhone', 1, 0))  AS iPhone,
  sum(if(origin = 'Android', 1, 0)) AS Android,
  sum(if(origin = 'Web', 1, 0))     AS Web
FROM user_operation_log;

第三種寫法(改寫 sum)

SELECT
  sum(origin = 'iPhone')  AS iPhone,
  sum(origin = 'Android') AS Android,
  sum(origin = 'Web')     AS Web
FROM user_operation_log;

第四種寫法

SELECT origin,count(*) num FROM user_operation_log GROUP BY origin;

於是在這個專案中我選擇採用的是第四種寫法,因為一句話解決就是爽吧。。。。

解決思路

根據售票員id分組獲取不同分組的,售票員id+對應的訂單數量

SELECT seller_id,COUNT(*) AS `value` FROM t_order GROUP BY seller_id ;

內連線之等值連線t_emp員工表,獲取id對應的員工姓名

SELECT e.e_name AS `name`,COUNT(*) AS `value` FROM t_order o JOIN t_emp e ON e.e_id=o.seller_id  GROUP BY seller_id ;

t_emp表



最後echart實現的效果如下


總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com