2016-06-13 3 views
2

Пожалуйста, как я могу проверить, превышает ли конкретное имя значение в базе данных MySQL. Я хочу сделать что-то вроде этого. SELECT id FROM table WHERE COUNT (name = 'john')> 2 Я знаю, что это не работает, но мне действительно нужно сделать что-то вроде этого.Имя счета MySQL больше значения

Пример: Студент, изучающий CS, из Нью-Йорка и точку градиента - 4,5, хочет зайти в общежитие. У меня есть таблицы общежитий с курсами курса, состояниями и Grade_Point. Я хочу выбрать hostel_id, где один и тот же пользователь с одним и тем же курсом> 2, состояние> 2 и grade_point> 2 находятся в одной комнате.

+1

Пожалуйста, добавьте пример данных и ожидаемый результат –

+0

Обратите внимание, что вам не нужно сначала делать SELECT. Фактически, это было бы слегка контрпродуктивно. Кроме того, нижеприведенные решения слишком сильно фокусируются на «2», а не на более простой логике «более 1». – Strawberry

ответ

1

Попробуйте это;)

SELECT id FROM table HAVING COUNT(IF(name = 'john', 1, null)) > 2 
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

Предполагая, что id не является уникальной, и вы хотите идентификаторов, где 'john' появляется 3 или более раз:

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

Это должно быть более эффективным, чем любая версия, которая использует условную агрегацию, поскольку это уменьшает размер данных перед делая агрегацию.

+0

Когда я использую 'having' в моем запросе, тогда я должен также использовать' group by'? Другими словами, почему вы использовали 'group by' в своем запросе? Это из-за 'наличия' или' count (*) '? –

+0

Я использовал 'group by', потому что я думаю, что OP хочет подсчитать количество раз, которое' 'john'' появляется для каждого' id'. По общему признанию, это довольно умозрительно, по этому вопросу. В общем, вы используете 'have' только с' group by'. MySQL расширяет использование 'having' для неагрегированных запросов, как способ использования псевдонимов столбцов для фильтрации. –

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

Consiedr следующее ...

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) 

В качестве альтернативы, вы можете просто выпустить простой INSERT на UNIQUE колонке. И используйте «затронутые строки» в качестве доказательства того, существует ли это имя.

Смежные вопросы