Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中没有查询?_Mysql_Count_Having - Fatal编程技术网

在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
    column2
    值,它将返回我们的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架构

    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
      column2
      值,它将返回我们的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 | +----+-------------+
      你的问题不清楚。在col1或col2中不包含“A”的行不是1。正如你所看到的,这肯定不止一个。你能详细说明一下吗?你的问题不清楚。在col1或col2中不包含“A”的行不是1。正如你所看到的,这肯定不止一个。你能详细说明一下吗?你错过了声明中的
      。谢谢你的帮助。但我想要的是selectcount(distinct(id))查询。我编辑了我的问题,您错过了
      声明中的
      。谢谢您的帮助。但我想要的是selectcount(distinct(id))查询。我编辑了我的问题,回答得很好。如果您能解释一下逻辑,我将不胜感激:)@PirateX我已经更新了我的答案,希望它能帮助您。答案很好。如果您能解释一下逻辑,我将不胜感激:)@PirateX我已经更新了我的答案,希望能对您有所帮助。