Нахождение отношения строк в таблице - PullRequest
0 голосов
/ 01 апреля 2019

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

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

Ответы [ 3 ]

1 голос
/ 01 апреля 2019

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

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
0 голосов
/ 01 апреля 2019
select 
  pc1.name,
  (select count(*) from PC pc2 where pc2.price > pc1.price) as count_bigger_price
from PC pc1
0 голосов
/ 01 апреля 2019

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

SELECT pc1.name,
       (SELECT count(*)
               FROM pc pc2
               WHERE pc2.price > pc1.price)
       FROM pc pc1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...