我尝试搜索其他帖子,但只能找到关于查找一个固定值的重复项的信息。
想象一下下表:
╔══════════╦═══════╗
║ customer ║ color ║
╠══════════╬═══════╣
║ 1 ║ black ║
║ 1 ║ black ║
║ 2 ║ red ║
║ 2 ║ black ║
║ 3 ║ red ║
║ 3 ║ red ║
║ 3 ║ red ║
║ 4 ║ black ║
║ 5 ║ black ║
║ 5 ║ green ║
║ 6 ║ purple║
╚══════════╩═══════╝
我要选择的“重复项”是指以下客户:
- 有多个黑色
- 一个黑色和另一个红色也是重复的
- 没有重复:顾客可以购买任意数量的红色
到目前为止我所拥有的
目前我只能选择黑色重复项,但无法将其与“一个黑色,不再是红色”条件结合起来。
SELECT customer FROM events WHERE
color = 'black'
group by customer
having count(*) > 1
也许我可以先计算黑色,然后再次加入现有表中计算其他黑色和红色?
期望的输出
作为客户,我希望得到以下结果:1,2。 更好的是我知道客户是双黑还是黑+一些红的输出:
╔══════════╦═══════════╦══════════════╗
║ customer ║ blackOnly ║ blackPlusRed ║
╠══════════╬═══════════╬══════════════╣
║ 1 ║ yes ║ no ║
║ 2 ║ no ║ yes ║
╚══════════╩═══════════╩══════════════╝
抱歉,不得不修改我的帖子
- 我在示例表中添加了客户 5 和 6 以及更多颜色。所以也许有些建议不再有效:-(。 (只是想快速编辑,所以如果我没有遵循一些修改规则,请告诉我)
- 感谢您迄今为止的快速答复
最佳答案
此查询首先创建一个临时表,其中包含每个客户的黑色和红色计数,然后查询该表以获取 blackOnly
和 blackPlusRed
列值,例如每个客户。
SELECT t.customer,
CASE WHEN t.black > 1 AND t.red = 0 THEN 'yes' ELSE 'no' END AS blackOnly,
CASE WHEN t.black > 0 AND t.red > 0 THEN 'yes' ELSE 'no' END AS blackPlusRed
FROM
(
SELECT *,
SUM(CASE WHEN color='black' THEN 1 ELSE 0 END) AS black,
SUM(CASE WHEN color='red' THEN 1 ELSE 0 END) AS red
FROM events
GROUP BY customer
) t
如果您想添加新的颜色条件,例如只有红色,那么您可以向外部查询添加新的 CASE
语句:
CASE WHEN t.red > 1 AND t.black = 0 THEN 'yes' ELSE 'no' END AS redOnly
这是一个演示:
关于SQL计数一列中的重复项,但重复项的条件不仅仅是一个固定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341782/