2015-12-27 3 views
1

Вот мой стол:Как выбрать все строки, которые имеют одинаковые значения

+----+-------+------+ 
| id | name | code | 
+----+-------+------+ 
| 1 | jack | 1 | 
| 2 | peter | 1 | 
| 3 | jack | 1 | 
| 4 | ali | 2 | 
| 5 | peter | 3 | 
| 6 | peter | 1 | 
| 7 | ali | 2 | 
| 8 | jack | 3 | 
| 9 | peter | 2 | 
| 10 | peter | 4 | 
+----+-------+------+ 

Я хочу, чтобы выбрать все строки, которые удовлетворяют: число {этих строк, его значение code между 1-3 и его name юдоль идентична} быть больше или равно, чем 4

из приведенных выше данных, я хочу этот вывод:

+----+-------+------+ 
| id | name | code | 
+----+-------+------+ 
| 2 | peter | 1 | 
| 5 | peter | 3 | 
| 6 | peter | 1 | 
| 9 | peter | 2 | 
+----+-------+------+ 

Как я могу сделать это?

ответ

4

Используйте подзапрос, чтобы выяснить, какие имена должны быть возвращены, а затем создайте на нем свой основной запрос.

Попробуйте это:

select * 
from mytable 
where name in (
    select name 
    from mytable 
    where code between 1 and 3 
    group by name 
    having count(*) > 3) 
and code between 1 and 3 
+0

Awesome, спасибо +1 – Shafizadeh

+0

Посмотрите, в действительности диапазон более, что всего три номера '1',' 2', '3'. Так что вы можете использовать 'между ... и ...' вместо 'in()' в вашем запросе? – Shafizadeh

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