我正在尝试生成一个查询,显示每个订单,并添加一个附加列,显示客户之前是否按 NAME、ADDRESS 或 USER_ID 下过订单,而不对结果进行分组。
我尝试过:
SELECT *, COUNT(`NAME`) c FROM `salesorders` GROUP BY `NAME` HAVING c > 0
这会显示所有客户订单,但是如果客户以前订购过,则由于分组,客户名称仅显示一次。
例如
Name, Date, Previous_Orders
John Smith, 2019-11-28, 2
Lisa Thomas, 2019-11-20, 1
我希望它显示这两个事件:
John Smith, 2019-11-28, 2
Lisa Thomas, 2019-11-20, 1
John Smith, 2019-05-07, 2
销售订单
列;
Name
User_ID
Date
假设新列是 Previous_Orders
最佳答案
对于 MariaDB 10.4.6,您可以使用 COUNT()
窗口函数:
select *,
count(full_add) over (partition by full_add) Previous_Orders
from salesorders;
如果Name
列是唯一的,那么您可以根据需要将user_id
替换为Name
。
如果 Previous_Orders
指的是当前行中截至日期的订单数,则更改为:
select *,
count(full_add) over (partition by full_add order by date) Previous_Orders
from salesorders;
请参阅demo .
关于MYSQL统计多个订单而不分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59092028/