簡體   English   中英

使用 GROUP UNION 和 SUM 在單個 SQL 表上匯總多個向量

[英]Summarising multiple vectors on a single SQL table using GROUP UNION and SUM

我正在嘗試創建一個查詢,該查詢按關系類型返回表中所有實體的計數。 例如。

1|VenueName1|0|0|0|

其中 0,0,0 是找到的關系數的計數。

該表本身包含許多與許多不同外部項目類型的外部關系。 每個關聯都可以在表中以“向前”或“向后”的方式出現,例如,每個關系可以出現以下兩種方式之一:

|objectTypeId|objectId|associatedId  |associatedTypeId|
|   13       |   1    |     8        |      2         |
|   2        |   8    |     1        |      13        |

說得通? 它們通常只會出現一次,但可以在任一“方向”。 因此,為了獲得給定類型的總關系,我使用類似於以下的 UNION:

SELECT ip.id, ip.name, SUM(totalUnion.EventTotals) as Events
 FROM iplace ip

 LEFT JOIN

(

SELECT object_id, count(*) as EventTotals FROM `iassociation` ia
WHERE object_type_id=2 AND associated_object_type_id=14
GROUP BY object_id
UNION ALL

SELECT associated_object_id, count(*) as EventTotals FROM `iassociation` ia
WHERE associated_object_type_id=2 AND object_type_id=14
GROUP BY associated_object_id


) totalUnion ON ip.id = totalUnion.object_id


WHERE ip.type_id IN (4,7,11,15,16) 
GROUP BY ip.id

沒問題。我的問題是我想對另外 2 個 typeId 做同樣的事情,再給兩個 SUM() 來顯示針對一個實體的不同關系類型總計。 如果我添加 eextra LEFT JOIN,我會得到重復的行並且計數被誇大了。

希望這有點道理。 任何人都可以提出解決方案嗎?

對於您的子查詢,您可以執行以下操作:

SELECT
    object_id,
    SUM(CASE WHEN object_type_id = 2 AND associated_object_type = 14 THEN 1 ELSE 0 END) AS event_1,
    SUM(CASE WHEN object_type_id = 5 AND associated_object_type = 8 THEN 1 ELSE 0 END) AS event_2
FROM
    iassociation
UNION ALL
GROUP BY
    object_id
SELECT
    associated_object_id,
    SUM(CASE WHEN associated_object_type = 2 AND object_type_id  = 14 THEN 1 ELSE 0 END) AS event_1,
    SUM(CASE WHEN associated_object_type = 5 AND object_type_id = 8 THEN 1 ELSE 0 END) AS event_2
FROM
    iassociation
GROUP BY
    associated_object_id

暫無
暫無

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

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