MYSQL统计多个订单而不分组

标签 mysql

我正在尝试生成一个查询,显示每个订单,并添加一个附加列,显示客户之前是否按 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/

相关文章:

mysql - SQL 保持运行计数,在内部连接之后

mysql - 两个查询与一个查询的速度,但限制输出

php - SQLite 语法与 MySQL 不兼容?

php - 在 MySQL 中选择时间范围时出现问题

mysql - Sql GROUP BY 与数组冲突

PHP/MySQL 安全性——从哪里开始?

php - MySQL 查询不返回任何内容或返回错误数据

MySQL:在脚本中使用环境变量

mysql - 频繁写作的栏目越少越好吗? mysql

mysql - 限制 SQL 语句 (MySQL) 中的特定 WHERE 子句?