[英]How to get count of two different fields with group by in MySQL?
我有一個“ 4表聯接的sql查詢”。 它們之間有關系。 表名稱是,用戶,文檔,document_type,document_type_group。 documents
表具有其他表中所有名為id的uniq標識符。 我嘗試獲取document_types中的文檔數和document_type_groups的總數。 (表名是土耳其語,對此感到抱歉),我可以通過以下查詢獲取document_type_groups的數量:
SELECT eTG.evrak_tipi_grup_adi, eT.evrak_tipi, COUNT(eTG.evrak_tipi_grup_adi) AS toplamGrup
FROM evraklar evr
LEFT JOIN kullanicilar kull ON evr.evrak_kaydeden_ybs_kullanici_id=kull.id
LEFT JOIN evrak_tipleri eT ON evr.evrak_tipi=eT.id
LEFT JOIN evrak_tipi_gruplari eTG ON evr.evrak_tipi_grubu=eTG.id
GROUP BY eTG.evrak_tipi_grup_adi
我可以通過以下方式獲取document_type的計數:
SELECT eTG.evrak_tipi_grup_adi, eT.evrak_tipi, COUNT(eT.evrak_tipi) AS toplamTiptekiler
FROM evraklar evr
LEFT JOIN kullanicilar kull ON evr.evrak_kaydeden_ybs_kullanici_id=kull.id
LEFT JOIN evrak_tipleri eT ON evr.evrak_tipi=eT.id
LEFT JOIN evrak_tipi_gruplari eTG ON evr.evrak_tipi_grubu=eTG.id
GROUP BY eT.evrak_tipi
我希望將這些查詢組合在一起,以顯示給用戶。 有什么線索嗎?
查看您的SQL,我有點不確定要發生什么。
這兩部分都檢索eTG.evrak_tipi_grup_adi和eT.evrak_tipi,但是一組按一個分組,而第二組按另一個分組。 如果非分組字段的值隨分組字段的不同而變化,則返回的值來自未指定的行,因此可能沒有意義。
如果值沒有變化(即,evrak_tipleri上的任何記錄在evrak_tipi_gruplari上只有一條記錄-假定文檔類型和文檔類型組),那么您當前的查詢可以寫為:-
SELECT eTG.evrak_tipi_grup_adi, eT.evrak_tipi, COUNT(eTG.evrak_tipi_grup_adi) AS toplamGrup
FROM evraklar evr
LEFT JOIN kullanicilar kull ON evr.evrak_kaydeden_ybs_kullanici_id=kull.id
LEFT JOIN evrak_tipleri eT ON evr.evrak_tipi=eT.id
LEFT JOIN evrak_tipi_gruplari eTG ON evr.evrak_tipi_grubu=eTG.id
GROUP BY eTG.evrak_tipi_grup_adi, eT.evrak_tipi
SELECT eTG.evrak_tipi_grup_adi, eT.evrak_tipi, COUNT(eT.evrak_tipi) AS toplamTiptekiler
FROM evraklar evr
LEFT JOIN kullanicilar kull ON evr.evrak_kaydeden_ybs_kullanici_id=kull.id
LEFT JOIN evrak_tipleri eT ON evr.evrak_tipi=eT.id
LEFT JOIN evrak_tipi_gruplari eTG ON evr.evrak_tipi_grubu=eTG.id
GROUP BY eTG.evrak_tipi_grup_adi, eT.evrak_tipi
所以可以合並到:
SELECT eTG.evrak_tipi_grup_adi, eT.evrak_tipi, COUNT(eTG.evrak_tipi_grup_adi) AS toplamGrup, COUNT(eT.evrak_tipi) AS toplamTiptekiler
FROM evraklar evr
LEFT JOIN kullanicilar kull ON evr.evrak_kaydeden_ybs_kullanici_id=kull.id
LEFT JOIN evrak_tipleri eT ON evr.evrak_tipi=eT.id
LEFT JOIN evrak_tipi_gruplari eTG ON evr.evrak_tipi_grubu=eTG.id
GROUP BY eTG.evrak_tipi_grup_adi, eT.evrak_tipi
計數只會帶回那些字段中非空值的數量。 我懷疑您可能想使用COUNT(DISTINCT ....)。
但是,這很大程度上取決於您要計數的內容以及表之間的關系(即一對多關系等)。
編輯
現在暫時忽略用戶,但我想這就是您想要的(使用sql小提琴中的表名和列名):
SELECT doc_types.id,
doc_types.doc_type_name,
Sub1.doc_type_group_name,
COUNT(documents.id) AS DocsForDocType,
Sub1.DocsForDocTypeGroup
FROM doc_types
LEFT OUTER JOIN documents
ON doc_types.id = documents.doc_type_id
LEFT OUTER JOIN
(
SELECT doc_type_groups.id, doc_type_groups.doc_type_group_name, COUNT(documents.id) AS DocsForDocTypeGroup
FROM doc_type_groups
INNER JOIN documents
ON doc_type_groups.id = documents.doc_type_group_id
GROUP BY doc_type_groups.id, doc_type_group_name
) Sub1
ON doc_types.doc_type_group_id = Sub1.id
GROUP BY doc_types.id, doc_types.doc_type_name, Sub1.doc_type_group_name, Sub1.DocsForDocTypeGroup;
這將獲取文檔類型和該類型的文檔數,同時還將獲取文檔類型的文檔組和該組中的文檔數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.