MySQL计数名称大于值

时间:2016-06-13 11:18:27

标签: mysql

请问如何检查特定名称是否大于MySQL数据库中的值。我想做点什么。     SELECT id FROM table WHERE COUNT(name =' john')> 2 我知道这不起作用,但我真的需要这样做。

一个例子:一个学习CS的学生,来自纽约,毕业点是4.5想要入住宿舍。 我有一个宿舍表,包括田地课程,州和Grade_Point。我想选择hostel_id,其中没有同一用户使用相同的课程> 2,状态> 2和grade_point> 2人在同一个房间。

5 个答案:

答案 0 :(得分:2)

您可以使用HAVING子句:

SELECT t.id FROM YourTable t
GROUP BY id
HAVING SUM(t.name = 'john') > 2

MySQL将布尔表达式设为0,1,因此SUM(t.name = 'john')将为每个ID显示约翰出现的出现次数,并将显示更多然后两次。

答案 1 :(得分:2)

假设id不是唯一的,并且您希望'john'出现3次或更多次的ID:

select id
from t
where name = 'john'
group by id
having count(*) > 2;

这应该比使用条件聚合的任何版本更有效,因为它在进行聚合之前减少了数据的大小。

答案 2 :(得分:1)

试试这个;)

SELECT id FROM table HAVING COUNT(IF(name = 'john', 1, null)) > 2

答案 3 :(得分:1)

 SELECT name, count(*) 
 FROM YourTable 
 where name = 'john'
 GROUP BY  name
 HAVING count(*) > 2

答案 4 :(得分:0)

考虑以下......

SELECT * FROM my_table ORDER BY id;
+----+------+
| Id | Name |
+----+------+
|  1 | Q    |
|  2 | W    |
|  3 | E    |
|  4 | R    |
|  5 | T    |
|  6 | Y    |
+----+------+

INSERT INTO my_table (name) SELECT 'Q' FROM (SELECT 1) x LEFT JOIN my_table y ON y.name = 'Q' WHERE y.id IS NULL;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

SELECT * FROM my_table ORDER BY id;
+----+------+
| Id | Name |
+----+------+
|  1 | Q    |
|  2 | W    |
|  3 | E    |
|  4 | R    |
|  5 | T    |
|  6 | Y    |
+----+------+

INSERT INTO my_table (name) SELECT 'Z' FROM (SELECT 1) x LEFT JOIN my_table y ON y.name = 'Z' WHERE y.id IS NULL;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0


SELECT * FROM my_table ORDER BY id;
+----+------+
| Id | Name |
+----+------+
|  1 | Q    |
|  2 | W    |
|  3 | E    |
|  4 | R    |
|  5 | T    |
|  6 | Y    |
|  7 | Z    |
+----+------+
7 rows in set (0.00 sec)

或者,您可以在UNIQUE列上发出一个简单的INSERT。并使用受影响的'行作为该名称是否已存在的证据。