首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于其他列获取客户的SQL查询

基于其他列获取客户的SQL查询
EN

Stack Overflow用户
提问于 2015-07-15 03:54:18
回答 1查看 87关注 0票数 2

我有一张桌子,就像:

代码语言:javascript
运行
复制
Order ID | Customer ID | Product ID | Recipient ID
1        | 2           | 3          | 4
2        | 4           | 6          | 7
3        | 4           | 6          | 8
4        | 9           | 6          | 8
5        | 9           | 6          | 8
6        | 2           | 8          | 4
7        | 3           | 8          | 4
8        | 3           | 8          | 5

我想就以下几点提出疑问:

  1. 为同一收件人购买相同礼物的顾客
  2. 顾客购买了不同的礼物给不同的收件人 客户4
  3. 为同一收件人购买不同礼品的顾客 客户2
  4. 顾客购买了相同的礼物给不同的收件人 客户4

我认为要运行的查询对于所有4人来说都是非常相似的,但是我很难理解如何开始。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-15 04:04:42

曾为同一收件人购买相同礼物的顾客(因此期望购买的次数超过一次):

代码语言:javascript
运行
复制
SELECT customer_id, recipient_id, Product_ID
FROM table_a
GROUP BY customer_id, recipient_id, Product_ID
HAVING COUNT(*)>1;

顾客购买了不同的礼物给不同的接受者:逻辑:

首先找出所有唯一的数据组合。 recipients>1的计数表示超过一个收件人,而products>1的计数表示有超过一个product=>,所以比recipient=different收件人多一个product_id=more超过一个礼物,所以一定是不同的礼物。

代码语言:javascript
运行
复制
SELECT customer_id, COUNT(recipient_id), COUNT(product_id)
FROM (
SELECT DISTINCT customer_id, recipient_id, product_id
FROM table_a ) b
GROUP BY customer_id
HAVING COUNT(recipient_id)>1 AND COUNT(product_id)>1;

曾为同一收件人购买不同礼品的顾客:

代码语言:javascript
运行
复制
SELECT customer_id, recipient_id, COUNT(DISTINCT product_id)
FROM table_a
GROUP BY customer_id, recipient_id
HAVING COUNT(DISTINCT product_id)>1

顾客购买了相同的礼物给不同的收件人

代码语言:javascript
运行
复制
SELECT customer_id, COUNT(DISTINCT recipient_id), product_id
FROM table_a
GROUP BY customer_id, product_id
HAVING COUNT(DISTINCT recipient_id)>1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31421199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档