我尝试在SQL上创建count
并使用此count
使用每行的信息进行计算。例如,使用列表值并将此数字除以查询列表的总数。
我可以这样做,但我知道的唯一方法是重复相同的JOIN,这是不好的,因为原始查询非常复杂,有一些过滤器等。
这样的东西有效,但有JOIN重复问题:
select distinct list.id, (select count(*) as counter from list l
JOIN order ord ON ord.list_id = l.id
JOIN item_order io ON ord .id = io .order_id)
-- another list informations, subselects
FROM list l
JOIN order ord ON ord.list_id = l.id
JOIN item_order io ON ord .id = io .order_id
我不想重复JOIN:
JOIN order ord ON ord.list_id = l.id
JOIN item_order io ON ord .id = io .order_id
list
的数据示例:
id date
40337422 2018-01-01
40338569 2018-01-01
403469639 2018-01-01
403469737 2018-01-01
403469781 2018-01-01
order
的数据示例:
id list_id
12 40337422
13 40337422
14 403469781
item_order
的数据示例:
id order_id
20 12
21 12
22 14
26 14
28 13
期望的结果(如果最终查询在count
上有5个列表... 5):
id count
40337422 5
40338569 5
403469639 5
403469737 5
403469781 5
看起来非常简单,但我无法以一种很好的方式弄清楚这是怎么做的。
谢谢!
答案 0 :(得分:2)
我猜你想要这个:
SELECT l.id, COUNT(*)
FROM order o
ON ord.list_id = l.id JOIN
item_order io
ON o.id = io.order_id
GROUP BY l.id;
但是你的逻辑和期望的结果更像是这样:
SELECT l.id, SUM(COUNT(*)) OVER ()