【问题标题】:How can I sum a group of a custom calculated field in SQL?如何在 SQL 中对一组自定义计算字段求和?
【发布时间】:2020-12-07 12:52:29
【问题描述】:

我有许多具有唯一 ID 的购物者记录,在某些情况下存在具有相同 ID 的购物者,我想总结他们的 shoppable_rated 分数,并且只返回这些 ID 的 shoppable_rated 总和的 1 个结果,因此 ID 不会有重复的行,并且它们的总分将相加。请你能告诉我如何改变我的查询吗?我在尝试使用 HAVING 时遇到了一点困难,无法弄清楚。

非常感谢!

SELECT 
    id, 
    shoppable,
    day,
    case when shoppable in ('Good','Very Good','Amazing') then 1 else 0 end as shoppable_rated
FROM 
    shoppers
WHERE
    shoppable != 'Unknown'
GROUP BY 
    id
ORDER BY 
    shoppable_rated DESC;

我的数据示例:

id, shoppable, day, shoppable_rated
1, Good, 26, 1
2, Very Good, 14, 1
3, Not Great, 3, 0
1, Bad, 16, 0
3, Amazing, 30, 1

【问题讨论】:

标签: sql sql-server many-to-one


【解决方案1】:

首先,删除结果集中不需要的所有未聚合列。

二、使用聚合函数:

SELECT id,
       SUM(case when shoppable in ('Good','Very Good','Amazing') then 1 else 0 end) as shoppable_rated
FROM shoppers
WHERE shoppable <> 'Unknown'
GROUP BY id
ORDER BY shoppable_rated DESC;

如果您需要按 id 和 day 的数据,则在 SELECTGROUP BY 中包含这两列:

SELECT id, day,
       SUM(case when shoppable in ('Good','Very Good','Amazing') then 1 else 0 end) as shoppable_rated
FROM shoppers
WHERE shoppable <> 'Unknown'
GROUP BY id, day
ORDER BY shoppable_rated DESC;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多