У меня есть настольный ПК с name
колонки и price
.
Я хочу отобразить имя каждого компьютера и общее количество других компьютеров в таблице, цена которых выше, как я могу это сделать?
Используйте коррелированный подзапрос, который выбирает все ПК с более высокой ценой и учитывает их в совокупности.
SELECT pc1.name,
(SELECT count(*)
FROM pc pc2
WHERE pc2.price > pc1.price)
FROM pc pc1;
select
pc1.name,
(select count(*) from PC pc2 where pc2.price > pc1.price) as count_bigger_price
from PC pc1
Вы можете самостоятельно присоединиться к таблице и использовать агрегирование:
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