Нахождение отношения строк в таблице

0

У меня есть настольный ПК с name колонки и price.

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

  • 1
    Пожалуйста, обновите ваше сообщение тем, что вы пробовали, а что нет, чтобы мы могли лучше помочь вам.
Теги:

3 ответа

1

Используйте коррелированный подзапрос, который выбирает все ПК с более высокой ценой и учитывает их в совокупности.

SELECT pc1.name,
       (SELECT count(*)
               FROM pc pc2
               WHERE pc2.price > pc1.price)
       FROM pc pc1;
0
select 
  pc1.name,
  (select count(*) from PC pc2 where pc2.price > pc1.price) as count_bigger_price
from PC pc1
0

Вы можете самостоятельно присоединиться к таблице и использовать агрегирование:

SELECT p.name, p.price, COALESCE(COUNT(p1.name), 0) cnt
FROM pc p
LEFT JOIN pc p1 ON p1.price > p.price
GROUP BY p.name, p.price

В MySQL 8.0 вы также используете оконные функции, которые обычно более эффективны, чем агрегация или коррелированные подзапросы:

SELECT 
    p.name, 
    p.price, 
    RANK() OVER(ORDER BY price DESC) - 1 rn
FROM pc p

Ещё вопросы

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