在mysql中没有查询?
如果我有这样一张桌子:在mysql中没有查询?,mysql,count,having,Mysql,Count,Having,如果我有这样一张桌子: id column1 column2 1 A A 1 B B 1 C A 2 B A 2 B C 2 C C 3 D C 3 B D 3
id column1 column2
1 A A
1 B B
1 C A
2 B A
2 B C
2 C C
3 D C
3 B D
3 E D
我想要的是计算不包含column1=A或column2=A的不同ID
在我的表中,count(distinct(id))应该是1,因为id 1有一行包含column1=a、column2=a和id 2、column2=a。因此id 3是行中不包含column1的唯一id!=A或专栏2!=A
我应该使用哪个查询?您可以这样做,当column1与'A'不同,column2与'B'不同时,它将返回按ID分组的行数:
SELECT COUNT(*) as cont
FROM test
WHERE column1 != 'A' AND column2 != 'A'
GROUP BY id
在将返回给您的示例中:
id cont
1 1
2 2
3 3
因为ID1只有(B,B)作为一个好值,ID2有(B,C)和(C,C),ID3都是一个好值
希望它能帮助你 您可以这样做,当column1与'A'不同,column2与'B'不同时,将返回按ID分组的行数:
SELECT COUNT(*) as cont
FROM test
WHERE column1 != 'A' AND column2 != 'A'
GROUP BY id
在将返回给您的示例中:
id cont
1 1
2 2
3 3
因为ID1只有(B,B)作为一个好值,ID2有(B,C)和(C,C),ID3都是一个好值
希望它能帮助你 据我所知,这里是
不同的id
select count(distinct id) from test2
where col1 !='A' AND col2 !='A'
输出
+-------------------+
| COUNT(DISTINCTID) |
+-------------------+
| 3 |
+-------------------+
从这里我了解到的是
不同的id
select count(distinct id) from test2
where col1 !='A' AND col2 !='A'
输出
+-------------------+
| COUNT(DISTINCTID) |
+-------------------+
| 3 |
+-------------------+
这可能会对您有所帮助;)
MySQL 5.6架构:
CREATE TABLE SO_TEST (
id int,
column1 char(2),
column2 char(2)
);
INSERT SO_TEST VALUES
(1,'A','A'),
(1,'B','B'),
(1,'C','A'),
(2,'B','A'),
(2,'B','C'),
(2,'C','C'),
(3,'D','C'),
(3,'B','D'),
(3,'E','D');
SELECT COUNT(1) AS RESULT
FROM (
SELECT id, GROUP_CONCAT(CONCAT(CONCAT(column1,','),column2)) STR FROM SO_TEST GROUP BY id
) TMP
WHERE FIND_IN_SET('A',TMP.STR) = 0
| RESULT |
|--------|
| 1 |
查询1:
CREATE TABLE SO_TEST (
id int,
column1 char(2),
column2 char(2)
);
INSERT SO_TEST VALUES
(1,'A','A'),
(1,'B','B'),
(1,'C','A'),
(2,'B','A'),
(2,'B','C'),
(2,'C','C'),
(3,'D','C'),
(3,'B','D'),
(3,'E','D');
SELECT COUNT(1) AS RESULT
FROM (
SELECT id, GROUP_CONCAT(CONCAT(CONCAT(column1,','),column2)) STR FROM SO_TEST GROUP BY id
) TMP
WHERE FIND_IN_SET('A',TMP.STR) = 0
| RESULT |
|--------|
| 1 |
好的,让我们解释一下
- 在子查询中,我按组id和
检索了所有concat
、column1
值,它将返回我们的follow结果,您可以在sqlfiddle中尝试 +----+-------------+ | id | STR | +----+-------------+ | 1 | A,A,B,B,C,A | | 2 | B,A,B,C,C,C | | 3 | D,C,B,D,E,D | +----+-------------+ 这可能会对您有所帮助;) MySQL 5.6架构:column2
CREATE TABLE SO_TEST ( id int, column1 char(2), column2 char(2) ); INSERT SO_TEST VALUES (1,'A','A'), (1,'B','B'), (1,'C','A'), (2,'B','A'), (2,'B','C'), (2,'C','C'), (3,'D','C'), (3,'B','D'), (3,'E','D');
SELECT COUNT(1) AS RESULT FROM ( SELECT id, GROUP_CONCAT(CONCAT(CONCAT(column1,','),column2)) STR FROM SO_TEST GROUP BY id ) TMP WHERE FIND_IN_SET('A',TMP.STR) = 0
查询1:| RESULT | |--------| | 1 |
CREATE TABLE SO_TEST ( id int, column1 char(2), column2 char(2) ); INSERT SO_TEST VALUES (1,'A','A'), (1,'B','B'), (1,'C','A'), (2,'B','A'), (2,'B','C'), (2,'C','C'), (3,'D','C'), (3,'B','D'), (3,'E','D');
SELECT COUNT(1) AS RESULT FROM ( SELECT id, GROUP_CONCAT(CONCAT(CONCAT(column1,','),column2)) STR FROM SO_TEST GROUP BY id ) TMP WHERE FIND_IN_SET('A',TMP.STR) = 0
好的,让我们解释一下| RESULT | |--------| | 1 |
- 在子查询中,我按组id和
检索了所有concat
、column1
值,它将返回我们的follow结果,您可以在sqlfiddle中尝试 +----+-------------+ | id | STR | +----+-------------+ | 1 | A,A,B,B,C,A | | 2 | B,A,B,C,C,C | | 3 | D,C,B,D,E,D | +----+-------------+column2
你的问题不清楚。在col1或col2中不包含“A”的行不是1。正如你所看到的,这肯定不止一个。你能详细说明一下吗?你的问题不清楚。在col1或col2中不包含“A”的行不是1。正如你所看到的,这肯定不止一个。你能详细说明一下吗?你错过了声明中的
声明中的。谢谢你的帮助。但我想要的是selectcount(distinct(id))查询。我编辑了我的问题,您错过了
。谢谢您的帮助。但我想要的是selectcount(distinct(id))查询。我编辑了我的问题,回答得很好。如果您能解释一下逻辑,我将不胜感激:)@PirateX我已经更新了我的答案,希望它能帮助您。答案很好。如果您能解释一下逻辑,我将不胜感激:)@PirateX我已经更新了我的答案,希望能对您有所帮助。
- 在子查询中,我按组id和