У меня есть такой запрос:MySQL проблема с HAVING
SELECT price FROM orders WHERE user_id = 10 HAVING count(*) > 1
Это работает, но всегда возвращает только один ряд. Что я делаю не так?
У меня есть такой запрос:MySQL проблема с HAVING
SELECT price FROM orders WHERE user_id = 10 HAVING count(*) > 1
Это работает, но всегда возвращает только один ряд. Что я делаю не так?
SELECT
o.price,
o.user_id
FROM orders o
INNER JOIN(
SELECT
user_id
FROM orders
WHERE
user_id = 10
GROUP BY user_id
HAVING count(*) > 1
) subQ
ON subQ.user_id = o.user_id
Поскольку HAVING
пункт работа с GROUP BY
см description здесь
Как упоминается в комментариях: -
Мне нужно, чтобы получить все заказы (цены), что конкретный пользователь сделал
Вам не нужно использовать HAVING
, вы можете просто так:
SELECT price FROM orders WHERE user_id = 10
Благодарим за быстрый ответ. Я добавил GROUP BY, но ничего не изменил. Одна и та же единая цена, но есть две из них. 'SELECT price FROM orders WHERE user_id = 10 GROUP BY user_id HAVING count (*)> 1'. Какие-либо предложения? – artnikpro
Мне нужно получить заказы пользователя только в том случае, если он совершил более одной покупки – artnikpro
Если вы сохраняете дату заказа в своем дБ, тогда вы можете заказать по дате поля. – Roopendra
HAVING
является дополнением к GROUP BY
. Он не может использоваться сам по себе. Документация here
Вы можете использовать имеющие без каких-либо данных, группировка, например:
SELECT price FROM orders WHERE user_id = 10 HAVING price > 10
Но если использовать сгруппированные данные, как кол, сумма и т.д., вы должны добавить group by
:
SELECT sum(price) FROM orders WHERE user_id = 1 group by user_id HAVING count(*) > 1;
'цена> 10' или' сумма (цена) 'не то, что мне нужно.Просто нужно получить все цены в столбце, поэтому я могу получить массив из них – artnikpro
Показаны только записи, в которых определенный идентификатор появляется несколько раз (от This Thread
SELECT * FROM table WHERE ID IN (SELECT ID FROM table GROUP BY ID HAVING COUNT(*) > 1)
В вашем случае вы хотели бы показать цены на заказы определенного идентификатора. Сначала мы выбираем user_id и ограничиваем условие «множественной покупки». Затем мы вводим это в обычный запрос
SELECT prices FROM orders
WHERE user_id = 10
AND user_id IN
(SELECT user_id FROM orders GROUP BY user_id HAVING COUNT(*) > 1);
Это должно работать
Отсчет функция (*) всегда будет возвращать только 1 запись. Просто подумай об этом. – elvenbyte
Не могли бы вы сообщить нам, чего вы хотите достичь, используя этот запрос? – Roopendra
Этот запрос на самом деле не имеет смысла, объяснение вашей конечной цели было бы очень полезно. –