【发布时间】:2016-08-26 00:52:35
【问题描述】:
我有如下表格:
user
id | status
1 | 0
gallery
id | status | create_by_user_id
1 | 0 | 1
2 | 0 | 1
3 | 0 | 1
media
id | status
1 | 0
2 | 0
3 | 0
gallery_media
fk gallery.id fk media.id
id | gallery_id | media_id | sequence
1 | 1 | 1 | 1
2 | 2 | 2 | 1
3 | 2 | 3 | 2
monitor_traffic
1:gallery 2:media
id | anonymous_id | user_id | endpoint_code | endpoint_id
1 | 1 | | 1 | 2 gallery.id 2
2 | 2 | | 1 | 2 gallery.id 2
3 | | 1 | 2 | 3 media.id 3 include in gallery.id 2
these means gallery.id 2 contain 3 rows
gallery_information
fk gallery.id
id | gallery_id
gallery 包括media。
monitor_traffic.endpoint_code: 1 .. 画廊; 2 .. 媒体
如果1 则monitor_traffic.endpoint_id 引用gallery.id
monitor_traffic.user_id, monitor_traffic.anonymous_id 整数或空
目标
我想输出gallery 行,按monitor_traffic 中每个gallery 行的计数排序,然后计算monitor_traffic 中与gallery 相关的media 行。最后求和。
我提供的查询只计算monitor_traffic 中的media 而不将它们相加,也不计算monitor_traffic 中的gallery。
如何做到这一点?
这是函数的一部分,输入选项然后输出构建查询,类似于this。我希望找到一个不需要更改查询其他部分的解决方案(可能带有子查询)。
查询:
SELECT
g.*,
row_to_json(gi.*) as gallery_information
FROM gallery g
LEFT JOIN gallery_information gi ON gi.gallery_id = g.id
LEFT JOIN "user" u ON u.id = g.create_by_user_id
-- start
LEFT JOIN gallery_media gm ON gm.gallery_id = g.id
LEFT JOIN (
SELECT
endpoint_id,
COUNT(*) as mt_count
FROM monitor_traffic
WHERE endpoint_code = 2
GROUP BY endpoint_id
) mt ON mt.endpoint_id = m.id
-- end
ORDER BY mt.mt_count desc NULLS LAST;
【问题讨论】:
标签: sql postgresql join subquery aggregate