gpt4 book ai didi

mysql - 根据多种条件选择

转载 作者:行者123 更新时间:2023-11-30 01:24:49 24 4
gpt4 key购买 nike

如果我们有两个这样的表

CREATE TABLE ta(`ID` int, `name` char(10));
INSERT INTO ta (`ID`, `name`)
VALUES
(1, 'A'),
(2, 'A'),
(3, 'B'),
(4, 'C'),
(5, 'B');

CREATE TABLE yourtable(`ID` int, `Val` int);
INSERT INTO yourtable (`ID`, `Val`)
VALUES
(1, 10),
(1, 20),
(1, 30),
(1, 30),
(2, 10),
(2, 20),
(3, 20),
(3, 20),
(4, 10),
(4, 20),
(5, 10),
(5, 20),
(5, 30);

而且,我需要使用两个表按名称对值进行分组。并且,对于条件 val=10 OR val=30 它工作正常。 http://sqlfiddle.com/#!2/9c099/1

select name, count(distinct t1.id)
from yourtable as t1, ta
where t1.id=ta.id
AND (val=10 OR val=30)
group by name

但是,对于条件(val=10 AND val!=30)我该如何查询呢?对于其中,输出应该是

   Count
A 1
B 0
C 1

这里有一个例子:以name=A为例,这里我们得到ID=1,2。因此,现在在表 yourtable 中,我们有 5 行 ID=1,2。对于 ID=1,val=10,20,20。对于 ID=2,val=10,20。这里只有 ID=2 满足 (val=10 AND val!=30) 所以,对于 name=A count=1

最佳答案

SELECT ta.name
, COUNT(DISTINCT t2.val)
FROM yourtable t1
LEFT
JOIN yourtable t2
ON t2.id = t1.id
AND t2.val IN (30) -- <-- things to exclude
LEFT
JOIN ta
ON ta.id = t1.id
WHERE t1.val IN (10) -- <-- things to include
GROUP
BY name;

NAME COUNT(T2.VAL)
A 1
B 1
C 0

http://sqlfiddle.com/#!2/9c099/169

关于mysql - 根据多种条件选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18126756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com