簡體   English   中英

MySql中每個組的已連接項目數

[英]Count of joined items per group in MySql

我需要得到一組結果,顯示每個'esta'組的累計項目數。

我按照企業對結果進行分組。

建立是內在聯系基地。

左連接項目與基礎連接。

所以在Esta組2中,假設有3個基本id。 附加到基本ID的每個書面和口頭記錄將計入結果集中的esta。 每個基本記錄可以附加多個“書面”或“口頭”。

我在數據庫中有6個verbals和4個written,它們分布在不同的'esta'記錄中。 在我的查詢中,他們都在計算我得到的結果的第一行。

我已經嘗試了相同的更多數據,並且無論'esta',第一行包含計算在一起的每個左連接元素。

SQL:

SELECT 
     esta.enf_esta_id
     ,SUM(IF(verbal.enf_verbal_id is not null,1,0)) as verbals
     ,SUM(IF(written.enf_written_id is not null,1,0)) as writtens
FROM 
     enf_base base
          INNER JOIN enf_esta esta ON esta.enf_esta_id = base.enf_esta_id
          LEFT JOIN enf_verbal verbal ON verbal.enf_base_id = base.enf_base_id
          LEFT JOIN enf_written written ON written.enf_base_id = base.enf_base_id
WHERE 
     1=1
GROUP BY 
     esta.enf_esta_id

結果:

enf_esta_id verbals writtens
2           10      10
3           1       0
4           1       1
6           0       0

為了證明頂行是不正確的,這里是從enf_esta_id 2獲取verbals和writtens的結果。

SELECT 
     COUNT( * ) AS total
FROM 
     enf_written
         INNER JOIN enf_base ON enf_base.enf_base_id = enf_written.enf_base_id
         INNER JOIN enf_esta ON enf_base.enf_esta_id = enf_esta.enf_esta_id
WHERE 
     enf_esta.enf_esta_id =2

收益率:

5

和enf_verbal產生的結果相同2.如果我們對問題查詢結果的頂行進行折扣,則將每個的總數加起來給出正確的10。

任何人都可以幫助我得到我需要的結果嗎?

你正在成倍增加。 假設有2個動詞和5個寫入,那么你的連接就會產生這10個記錄(即所有組合)。 而不是然后加入表並聚合,您應首先聚合然后加入聚合。 在您的情況下,這是每個基本ID的聚合,您最終將進一步聚合以獲得estas。

select 
  base.enf_esta_id,
  coalesce(sum(verbal.cnt), 0) as verbals,
  coalesce(sum(written.cnt), 0) as writtens
from enf_base base 
left join
(
  select enf_base_id, count(*) as cnt
  from enf_verbal
  group by enf_base_id
) verbal on verbal.enf_base_id = base.enf_base_id
left join
(
  select enf_base_id, count(*) as cnt
  from enf_written
  group by enf_base_id
) written on written.enf_base_id = base.enf_base_id
group by base.enf_esta_id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM