首页 > 解决方案 > 不买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

标签: sqloracle

解决方案


我会使用group byand来做到这一点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 的用户。


推荐阅读