2015-08-11 3 views
2

У меня есть точки таблица с данными следующим образом:MySQL СУММ() в предложении WHERE

+----+---------+--------+ 
| id | user_id | points | 
+----+---------+--------+ 
| 1 |  1 | 10 | 
| 2 |  3 | 5 | 
| 3 |  1 | 12 | 
| 4 |  2 | 27 | 
| 5 |  1 | 14 | 
+----+---------+--------+ 

я нужен идентификатор пользователя от приведенных выше данных тех точек, сумма которых больше, чем 10

как

+--------+ 
| userid | 
+--------+ 
| 1 | 
| 2 | 
+--------+ 

ответ

7

Вы не можете использовать пользователя WHERE в своем запросе, так как вы пытаетесь работать с агрегатами пользователей. Вместо этого используйте GROUP BY вместе с HAVING пункта, как это:

SELECT t.user_id FROM 
table t 
GROUP BY t.user_id 
HAVING SUM(t.points) > 10 

Вот SQL Fiddle, где вы можете проверить этот запрос.

1

Вы должны использовать group by и having: результат

select user_id 
from TableName 
group by user_id 
having sum(points)>10 

Пример:

user_id 
------- 
1 
2 

результат образца в SQL Fiddle

1

Попробуйте этот запрос

select user_id from tablename 
group by user_id 
having sum(points)>10 
1

Вы должны использовать having пункт:

select userid 
from `table` 
group by user_id 
having sum(points) > 10 
1

Вы не можете использовать агрегатные выражения в предложении where. Однако вы можете использовать предложение having. Она действует подобно статье where в том смысле, что он используется, чтобы отфильтровать результаты, но он применяется после Оговорка group by, так что он может действовать на агрегатных выражений также:

SELECT user_id 
FROM  points 
GROUP BY user_id 
HAVING SUM(points) > 10 
1

Попробуйте этот запрос с наличием:

select user_id 
from [your_table] 
group by user_id 
having sum(points)>10 
Смежные вопросы