sql - 根据 SQL 中查询的值添加指示“1”或“0”的列
问题描述
我目前正在尝试将值添加到指示客户是否为 VIP 的列中,VIP 客户已下达 10 个或更多订单。1 = VIP,0 = 非 VIP。
我编写了这个查询,它成功返回了一个列,该列提供了每个客户 ID 的订单计数。
SELECT *
FROM customer;
SELECT customer.customer_id, customer_name, address_line_1, city, state_province, count(order_header.customer_id) AS ordercount
FROM customer
LEFT JOIN order_header ON customer.customer_id = order_header.customer_id
GROUP BY customer.customer_id;
如何更改此设置以指示具有 >= 10 个订单的客户为“1”,而其他所有人为“0”?
此查询使用子查询,但每行的“ordercount”列是 6,921(订单总数)。
WITH OrderCountTable AS
(
SELECT customer.customer_id, customer_name, address_line_1, city, state_province, count(order_header.customer_id) AS ordercount
FROM order_header, customer
GROUP BY customer.customer_id
)
SELECT *
FROM OrderCountTable
WHERE ordercount >= 10;
我很困惑,不知道如何实现我的目标,我觉得我把这件事复杂化了。任何帮助将不胜感激。
根据 Akina 的评论更新 #1
FROM (SELECT customer.customer_id, customer_name, address_line_1, city, state_province, count(order_header.customer_id) AS ordercount
FROM customer
LEFT JOIN order_header ON customer.customer_id = order_header.customer_id
GROUP BY customer.customer_id) AS vipTable
这将返回正确的数据集,但 isVIP 在每一行上都是错误的。我放错东西了吗?
解决方案
最终工作的解决方案:
SELECT customer_id, customer_name, address_line_1, city, state_province, CASE WHEN ordercount >= 10 THEN 1 ELSE 0 END AS is_vip_customer
FROM (SELECT customer.customer_id, customer_name, address_line_1, city, state_province, count(order_header.customer_id) AS ordercount
FROM customer
LEFT JOIN order_header ON customer.customer_id = order_header.customer_id
GROUP BY customer.customer_id) AS vipTable
推荐阅读
- ibm-midrange - 在 IBMI 中为多个字符替换 SQL 中的函数(来自表)
- sql - 在oracle表中获取具有不同多列的唯一行
- python - 无法在 awscli 中访问 boto3 的凭据 - 窗口 7
- python - 外部数据库连接上的 Django 操作错误
- sql-server - 初始化sqlcmd库失败,错误号-2147467259如何解决?
- java - 对多个文件执行功能
- pandas - python pandas动态查询传入函数
- javascript - 如何从 v-btn-toggle 获取选定按钮的值?
- php - Laravel 框架中 webpack.mix.js 的职责是什么
- ios - 如何使 UILabel 与数据模型保持同步