如何显示返回的每一行的最终计数?

时间:2018-05-15 20:40:27

标签: sql sql-server join count

我尝试在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

看起来非常简单,但我无法以一种很好的方式弄清楚这是怎么做的。

谢谢!

1 个答案:

答案 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 ()