[英]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.