2014-02-07 36 views
0

我有一個「4表連接sql查詢」。他們之間有關係。表名稱是用戶,文檔,document_type,document_type_group。 documents表中的所有id都從其他表中命名爲uniq標識符。我嘗試獲取document_types中的文檔數和document_type_groups的總數。 (表名是土耳其,遺憾的是) 我可以得到document_type_groups的計數與下面的查詢:如何在MySQL中通過group來計算兩個不同的字段?

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 

我想結合這查詢將它們顯示在同一張桌子上給用戶。 任何線索?

+0

請提供CREATE TABLE和INSERT INTO命令,以便容易地再現您的情況 –

+0

我在哪裏可以把SQL文件的網站的? – caglaror

+1

sqlfiddle.com會訣竅。但是,只需粘貼CREATE和INSERT語句就足夠了。這是一個艱難的部分。 –

回答

1

看着你的SQL,我有點不確定你想要發生什麼。

兩件檢索eTG.evrak_tipi_grup_adi和eT.evrak_tipi,而是一個羣體的一個,而第二組由其它。如果非分組字段的值因分組字段而異,則返回的值來自未指定的行,因此可能無意義。

如果值不變化(即,在evrak_tipleri任何記錄只對evrak_tipi_gruplari一個記錄 - 怙docuement類型和文件類型組),那麼當前的查詢可以寫成: -

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; 

這是獲得文檔類型和該類型文件的數量,同時也越來越文檔組文檔類型和文檔數量在這個組中。

+0

我要在COUNT中嘗試DISTINCT。 – caglaror

+0

這裏的最後一個sql的結果:http://image.caglarorhan.com/2014/2/7/88608681775372471512.jpg但我想要toplamGrup作爲toplamtiptekiler的累計計數。這意味着我需要計數document_types和計數document_type_groups。 – caglaror

+0

我對你想要的東西有點困惑。你能舉出一些示例數據和你想要的結果嗎? – Kickstart

相關問題