SQL / MySQL / PostGres - возвращает все столбцы и записи, когда цена была обновлена

0

У меня есть таблица с тысячами записей для предметов аукциона. Некоторые предметы аукциона продаются сразу, другие переименовываются на последующем аукционе и по более низкой цене. Каждая запись позиции аукциона имеет уникальный идентификатор для ее записи в базе данных (поэтому, когда элемент повторно вводится, он получает новый идентификатор листинга), но также имеет уникальный идентификатор элемента, который не изменяется при повторном перечислении.

Кроме того, существуют категории предметов аукциона, а также конкретные бренды и типы (например, категория "мебель" имеет множество списков, из которых производитель "la-z-boy" является одним брендом, а затем "recliner" еще более конкретный тип).

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

SELECT category, unique_item_identifier FROM auction_listings WHERE category='furniture' GROUP BY unique_item_identifier HAVING COUNT(*)>1; 

Проблема с этим запросом заключается в том, что он возвращает только уникальный идентификатор, категорию и счетчик, но я не могу просмотреть изменения цены. Кроме того, если я попытаюсь получить более конкретный запрос, например

SELECT category, brand, unique_item_identifier FROM auction_listings WHERE category='furniture' GROUP BY unique_item_identifier HAVING COUNT(*)>1;

это не выполняется, потому что: "Выражение №2 списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец, который функционально не зависит от столбцов в предложении GROUP BY, это несовместимо с sql_mode = only_full_group_by"

Я хочу увидеть всех ла-г-мальчиков, у которых были изменения цен, а затем посмотреть, что это за изменения цены. Я также хотел бы иметь возможность запускать запрос, в котором показывались все ла-г-мальчики (независимо от типа), в которых были изменения цены, поэтому я также хочу иметь возможность выбирать категорию, бренд, тип WHERE brand = 'la- z-boy '(а затем показать всех ла-г-мальчиков, у которых были изменения цен, с выходом, включая разные цены).

Я ищу результаты, такие как:

unique-1 la-z-boy recliner price: $1000 entered on 1/1/2018
unique-1 la-z-boy recliner price: $800 entered on 2/1/2018
unique-2 la-z-boy recliner price: $1,200 entered on 1/1/2018
unique-2 la-z-boy recliner price: $1,050 entered on 2/1/2018
unique-2 la-z-boy recliner price: $950 entered on 3/1/2018
unique-3 la-z-boy couch price: $1,200 entered on 1/1/2018
unique-3 la-z-boy couch price: $1,000 entered on 2/1/2018

Заранее спасибо - я прочитал здесь десятки ответов, которые очень близки к этому конкретному запросу, но не смогли найти это явно и не смогли выяснить из других ответов, как это сделать.

  • 0
    sql_mode=only_full_group_by находится в MySQL, а не в Postgres, поэтому я удалил этот тег. Ваш вопрос был бы намного понятнее, если бы вы предоставили образцы данных и желаемые результаты.
Теги:

1 ответ

0

Вы не предоставили выборочные данные, но, надеюсь, будет достаточно, чтобы продемонстрировать основную

+------+--------+----------+-------------+--------+
| id   | userID | industry | companyName | salary |
+------+--------+----------+-------------+--------+
|    1 |      2 |       55 | abc company |     55 |
|    2 |      2 |       55 | xyz company |     75 |
|    3 |      2 |       56 | 123 company |     85 |
|    4 |      3 |       12 | cjf company |     25 |
|    5 |      4 |       52 | xxx company |     77 |
|    6 |      4 |       65 | yyy company |     99 |
+------+--------+----------+-------------+--------+
6 rows in set (0.00 sec)

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

select userid,companyname,salary
from uex
where userid in(
select userid
from uex
group by userid having count(distinct salary) > 1
);
+--------+-------------+--------+
| userid | companyname | salary |
+--------+-------------+--------+
|      2 | abc company |     55 |
|      2 | xyz company |     75 |
|      2 | 123 company |     85 |
|      4 | xxx company |     77 |
|      4 | yyy company |     99 |
+--------+-------------+--------+
5 rows in set (0.02 sec)

Если вы хотите выбрать конкретного пользователя, укажите предложение where в подзапросе

select userid,companyname,salary
from uex
where userid in(
select userid
from uex
where userid = 2
group by userid having count(distinct salary) > 1
);
  • 0
    Если я выполню этот запрос и захочу указать конкретный идентификатор пользователя, он вернет все результаты из исходной таблицы. например, code выберите идентификатор пользователя, название компании, зарплату из uex, где идентификатор пользователя = 2 в (выберите идентификатор пользователя из группы uex по идентификатору пользователя со счетом (отличная зарплата)> 1); code

Ещё вопросы

Сообщество Overcoder
Наверх
Меню