请问如何检查特定名称是否大于MySQL数据库中的值。我想做点什么。 SELECT id FROM table WHERE COUNT(name =' john')> 2 我知道这不起作用,但我真的需要这样做。
一个例子:一个学习CS的学生,来自纽约,毕业点是4.5想要入住宿舍。 我有一个宿舍表,包括田地课程,州和Grade_Point。我想选择hostel_id,其中没有同一用户使用相同的课程> 2,状态> 2和grade_point> 2人在同一个房间。
答案 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。并使用受影响的'行作为该名称是否已存在的证据。