在表中查找行关系

时间:2019-04-01 19:33:11

标签: mysql sql

我有一台PC,其中有列price和{{1}}。

我想在表中显示价格较高的每台PC的名称和其他PC的总数,怎么办?

3 个答案:

答案 0 :(得分:1)

您可以自联接表并使用聚合:

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

答案 1 :(得分:0)

使用相关子查询来选择价格较高的所有PC并将其计入汇总中。

SELECT pc1.name,
       (SELECT count(*)
               FROM pc pc2
               WHERE pc2.price > pc1.price)
       FROM pc pc1;

答案 2 :(得分:0)

select 
  pc1.name,
  (select count(*) from PC pc2 where pc2.price > pc1.price) as count_bigger_price
from PC pc1