【问题标题】:How do I determine for each order whether it is over or under the average order value in SQL [closed]如何确定每个订单是否超过或低于 SQL 中的平均订单价值 [关闭]
【发布时间】:2021-02-18 23:15:30
【问题描述】:

我的桌子是这样的

CUST   Date       Value
102  2019-12-03   7
101  2019-12-06   8
102  2019-12-06   7
102  2019-12-13   10
102  2019-12-17   5
102  2019-12-18   5
103  2019-12-22   5
102  2019-12-22   7

【问题讨论】:

  • 样本数据很棒。也向我们展示预期的结果。
  • 您使用的是 MySQL 还是 R?还是两者兼而有之?
  • 显示此数据的所需输出。添加说明。
  • 好吧,在选择 *, avg(value) over(partition by cust) as avg_score from sales
  • @jarlh 我需要用 SQL 和 R 来呈现它

标签: mysql sql r window-functions


【解决方案1】:

这是使用 R 和 dplyr 库的一种方法。

library(dplyr)

df %>%
  group_by(CUST) %>%
  mutate(Label = ifelse(Value > mean(Value, na.rm = TRUE), 
                        'over average', 'under average'))

#    CUST  Date       Value Label        
#  <int> <chr>      <int> <chr>        
#1   102 2019-12-03     7 over average 
#2   101 2019-12-06     8 under average
#3   102 2019-12-06     7 over average 
#4   102 2019-12-13    10 over average 
#5   102 2019-12-17     5 under average
#6   102 2019-12-18     5 under average
#7   103 2019-12-22     5 under average
#8   102 2019-12-22     7 over average 

数据

df <- structure(list(CUST = c(102L, 101L, 102L, 102L, 102L, 102L, 103L, 
102L), Date = c("2019-12-03", "2019-12-06", "2019-12-06", "2019-12-13", 
"2019-12-17", "2019-12-18", "2019-12-22", "2019-12-22"), Value = c(7L, 
8L, 7L, 10L, 5L, 5L, 5L, 7L)), class = "data.frame", row.names = c(NA, -8L))

【讨论】:

  • 我想知道平均值是多少。
  • 啊,就是这样,谢谢!!只需要 SQL 中的那个
【解决方案2】:

希望这个例子可以帮助你证明你的问题,(在 MySQL 8.0 中出现):

select *, avg(value) over(partition by cust) as avg_score from sales

[结果]:

将是:

[编辑]: 现场演示

create table sales (CUST int,   Date1 date, Value int);

INSERT INTO sales  VALUES (102,"2019-12-03",7);
INSERT INTO sales  VALUES (101,"2019-12-06",8);
INSERT INTO sales  VALUES (102,"2019-12-06",7);
INSERT INTO sales  VALUES (102,"2019-12-13",10);
INSERT INTO sales  VALUES (102,"2019-12-17",5);
INSERT INTO sales  VALUES (102,"2019-12-18",5);
INSERT INTO sales  VALUES (103,"2019-12-22",5);
INSERT INTO sales  VALUES (102,"2019-12-22",7);
✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
select *
from sales;
海关 |日期1 |价值 ---: | :--------- | ----: 102 | 2019-12-03 | 7 101 | 2019-12-06 | 8 102 | 2019-12-06 | 7 102 | 2019-12-13 | 10 102 | 2019-12-17 | 5 102 | 2019-12-18 | 5 103 | 2019-12-22 | 5 102 | 2019-12-22 | 7
select *, avg(value) over(partition by cust) as avg_score from sales
海关 |日期1 |价值 | avg_score ---: | :--------- | ----: | --------: 101 | 2019-12-06 | 8 | 8.0000 102 | 2019-12-03 | 7 | 6.8333 102 | 2019-12-06 | 7 | 6.8333 102 | 2019-12-13 | 10 | 6.8333 102 | 2019-12-17 | 5 | 6.8333 102 | 2019-12-18 | 5 | 6.8333 102 | 2019-12-22 | 7 | 6.8333 103 | 2019-12-22 | 5 | 5.0000

db小提琴here

【讨论】:

  • 这只是显示平均值,它需要告诉我该值是否低于或高于该值的总平均值
猜你喜欢
  • 2021-03-20
  • 2021-09-02
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
相关资源
最近更新 更多