sql - 不买sql的用户
问题描述
我正在使用 oracle sql 开发人员
我有两个表:用户
╔══════╤═════════╗
║ u_id │ country ║
╠══════╪═════════╣
║ 11 │ Germany ║
╟──────┼─────────╢
║ 22 │ Germany ║
╟──────┼─────────╢
║ 33 │ Italy ║
╟──────┼─────────╢
║ 44 │ France ║
╟──────┼─────────╢
║ 55 │ Spain ║
╟──────┼─────────╢
║ 66 │ Italy ║
╟──────┼─────────╢
║ 77 │ Italy ║
╚══════╧═════════╝
和交易:
╔════╤══════╤════════╗
║ id │ u_id │ id_cat ║
╠════╪══════╪════════╣
║ A │ 11 │ 2 ║
╟────┼──────┼────────╢
║ B │ 22 │ 1 ║
╟────┼──────┼────────╢
║ C │ 33 │ 2 ║
╟────┼──────┼────────╢
║ D │ 33 │ 3 ║
╟────┼──────┼────────╢
║ E │ 44 │ 3 ║
╟────┼──────┼────────╢
║ F │ 55 │ 2 ║
╟────┼──────┼────────╢
║ G │ 66 │ 1 ║
╟────┼──────┼────────╢
║ H │ 55 │ 1 ║
╟────┼──────┼────────╢
║ I │ 66 │ 1 ║
╟────┼──────┼────────╢
║ J │ 77 │ 2 ║
╚════╧══════╧════════╝
我想与居住在(德国或跨度)并且没有从类别 1 购买商品的用户创建表。所以结果应该是 u_id = 11
我做了代码:
CREATE TABLE
AS SELECT u.u_id
FROM users u
LEFT JOIN transactions s ON u.u_id = s.u_id
WHERE
(u.country = 'Germany' OR u.country ='Spain') AND
(s.id_cat != 1)
;
但它显示 u_id = 11 和 55
解决方案
我会使用group by
and来做到这一点having
:
SELECT u.u_id
FROM users u LEFT JOIN
transactions s
ON u.u_id = s.u_id
WHERE u.city IN ('Germany', 'Spain')
GROUP BY u.u_id
HAVING SUM(CASE WHEN s.id_cat = 1 THEN 1 ELSE 0 END) = 0;
这计算了交易的数量id_cat = 1
。然后只返回值为 0 的用户。
推荐阅读
- android - 为什么我不能让我的应用程序留在我的设备上?
- ios - 为什么我的静态库会出现 iOS 链接器错误?
- angular - 如何在焦点上显示自动完成选项
- excel - Excel 根据多个搜索条件查找多个唯一值
- kubernetes - Openshift Origin 3.6 删除 pod 总是与终结器一起挂起:-foregroundDeletion
- python - Selenium webdriver 无法在 Jupyter Notebook 的一个单元格中定位元素并将其定位在另一个单元格中
- bash - 如何尾随-F,但只保留最后5行的滚动输出
- kubernetes - 在最新的 0.7 版本中,OpenEBS Jiva 卷大小的单位是否有任何变化?
- javascript - 在 Angular 中使用第三个插件
- android - 如何使这张图片可点击以以编程方式重定向任何活动?