[英]Complexed SQL group by and having in select query
我有一個查詢,返回以下結果:
user_id contact_id contact_id2
--------------------------------------
1 45 3
1 null null
2 433 65
2 433 6789
2 433 5543
3 443 467
3 null null
4 null null
5 5564 12
5 null null
我想調整查詢以刪除contact_id和contact_id2為null的任何行,但僅當該用戶id具有不為null的行時。
因此結果看起來像...
user_id contact_id contact_id2
--------------------------------------
1 45 3
2 433 65
2 433 6789
2 433 5543
3 443 467
4 null null
5 5564 12
查看4的用戶標識如何仍然具有空行,因為它沒有“非空”結果。
我試過以下......
SELECT user_id, contact_id, contact_id2 FROM user_table
LEFT JOIN contact_table ON .......
LEFT JOIN contact2_table ON ........
GROUP BY user_id, contact_id, contact_id2
HAVING count(contact_id) > 0 OR (count(contact_id) = 0 AND count(user_id) > 1)
不知道我還能嘗試什么。
原始查詢是巨大的,所以我希望你能夠使用我放在這里的這個非常簡化的版本......
編輯::
將HAVING子句設置為count(contact_id)> 0將獲取contact_id不為null的所有記錄,但現在我需要添加不在此結果集中的所有其他用戶。
這是一個主意...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,user_id INT NOT NULL
,contact_id INT NULL
,contact_id2 INT NULL
);
INSERT INTO my_table (user_id,contact_id,contact_id2) VALUES
(1 ,45 ,3),
(1 ,null ,null),
(2 ,433 ,65),
(2 ,433 ,6789),
(2 ,433 ,5543),
(3 ,443 ,467),
(3 ,null ,null),
(4 ,null ,null),
(5 ,5564 ,12),
(5 ,null ,null);
SELECT DISTINCT x.user_id
, y.contact_id
, y.contact_id2
FROM my_table x
LEFT
JOIN my_table y
ON y.user_id = x.user_id
AND y.contact_id IS NOT NULL;
+---------+------------+-------------+
| user_id | contact_id | contact_id2 |
+---------+------------+-------------+
| 1 | 45 | 3 |
| 2 | 433 | 65 |
| 2 | 433 | 6789 |
| 2 | 433 | 5543 |
| 3 | 443 | 467 |
| 4 | NULL | NULL |
| 5 | 5564 | 12 |
+---------+------------+-------------+
請嘗試下面的查詢。
select user_id,contact_id,contact_id2 from table where user_id in ( select distinct user_id from table group by user_id having count(user_id)>1) and contact_id is not null;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.