在mysql中没有查询?

时间:2016-05-05 07:00:27

标签: 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          E          D

我想要的是计算不包含column1 = A或column2 = A的不同ID。

从我的表中,count(distinct(id))应为1,因为id 1的行包含column1 = A,column2 = A和id 2,column2 = A.所以id 3是行中不包含column1!= A或column2!= A的唯一ID。

我应该使用哪种查询?

3 个答案:

答案 0 :(得分:2)

这可能会对你有帮助;)

SQL Fiddle

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');

查询1

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

好的,我们来解释一下。

  • 在子查询中,我按组ID和column1检索了所有column2concat值,它会返回我们的结果,您可以在sqlfiddle。

    +----+-------------+
    | id | STR         |
    +----+-------------+ 
    | 1  | A,A,B,B,C,A | 
    | 2  | B,A,B,C,C,C | 
    | 3  | D,C,B,D,E,D |
    +----+-------------+
    
  • 所以在主查询中,我在FIND_IN_SET(param1, param2)子句中使用了WHERE,此函数会在 param2 param1 的索引>(param2的每个元素必须用逗号分隔),如果 param1 不在 param2 中,则返回0,所以我们可以清楚WHERE子句。

  • 最后count(1)将帮助我们获得我们想要的东西。

<强> Results

| RESULT |
|--------|
|      1 |

答案 1 :(得分:1)

你可以做这样的事情,它会返回当column1与'A&#39; A&#39;分开时按ID分组的行数。和column2与&#39; B&#39;:

不同
SELECT COUNT(*) as cont 
FROM test
WHERE column1 != 'A' AND column2 != 'A'
GROUP BY id

在您的示例中将返回:

id    cont

1      1
2      2
3      3

因为id 1只有(B,B)作为一个好的值,id 2有(B,C)和(C,C),id 3都是一个好的值。

希望它会对你有所帮助。

答案 2 :(得分:1)

据我所知,$search_term

$query = $db->getConnection()->prepare("SELECT * FROM `coils` WHERE coil_name IS LIKE '%:search_term%' ORDER BY id DESC LIMIT {$start}, {$perPage}");
$query->execute(array(
    ':search_term' => $search_term
));

echo $query->rowCount()

输出

distinct IDs