在同一个表中按用户选择计数付款订单

时间:2017-04-24 10:20:07

标签: mysql sql mariadb

如果我有这张表的例子

-----------------------------
|ID|user_no|order_paid_count|
|---------------------------|
|1 |1      |2               |
|2 |1      |2               |
|3 |1      |2               |
|4 |2      |1               |
|5 |2      |1               |
|---------------------------|

我希望结果是

SELECT o1.*, (SELECT COUNT(*) FROM order AS o2 WHERE o1.user_no=o2.user_no AND o2.paid=yes) as order_paid_count 
FROM order as o1

我这样做的查询,但它不起作用..加载这么长时间并没有结果,它像循环无限

def halfhour_bin(time):
    return ((time.hour*60)+time.minute)//30

for j in range(len(df)):        
    df.ix[j,3] = halfhour_bin(df.ix[j,1])

2 个答案:

答案 0 :(得分:1)

有一个子查询,用于计算每个user_no的付费订单数量。结果为LEFT JOIN

select o1.id, o1.user_no, o2.order_paid_count
from order as o1
left join (select user_no, count(*) as order_paid_count
           from order
           where paid = 'yes'
           group by user_no) as o2
  on o1.user_no = o2.user_no

LEFT JOIN也包括user_no,但根本没有付费订单。)

答案 1 :(得分:0)

使用DENSE_RANK方法来实现结果:

 SELECT ID , user_no , DENSE_RANK() OVER (ORDER BY user_no DESC) 
        order_paid_count 
 FROM #Table 
 ORDER BY user_no