1. 程式人生 > >mysql多表統計數查詢行轉列

mysql多表統計數查詢行轉列

今天在統計查詢時遇到以下問題,自己做個記錄:

部門A在A地區釋出一條資料庫型別資源,在B地區釋出一條檔案型別資源。存在db表:

db
部門 地區 名稱 。。。
部門A 湖南 資料庫資源1 。。。
部門A 河北 資料庫資源2 。。。
部門B也在A地區釋出一條檔案型別資源。存在file表如下:
file
部門 地區 名稱 。。。
部門B 河北 檔案資源1 。。。
期望結果:(按照部門和地區進行分組。分別統計某部門在某地區下發布的某種型別資源的數量)
部門 地區 資料庫 檔案
部門A 湖南 1 0
部門A 河北 1 0
部門B 河北 0 1
sql語句如下:
SELECT
	T.部門,
	T.地區,
	SUM(T.fileCount) AS fileCount,
	SUM(T.dbCount) AS dbCount
FROM
	(SELECT
		d.部門,
		d.地區,
		0 AS fileCount,
		1 AS dbCount
	FROM
		db d
	UNION ALL
	SELECT
		f.部門,
		f.地區,
		1 AS fileCount,
		0 AS dbCount
	FROM
		file f
	) T
GROUP BY
	T.部門, T.地區
先分別查出對應表中的釋出資源條數。根據返回的結構設定對應的列名,匹配的型別設定為1,沒有的設定為0。再通過union all 連線兩個表的結果。最後設定分組條件進行分組。分別對統計的型別資料進行求和得到最終結果