我有一台PC,其中有列price
和{{1}}。
我想在表中显示价格较高的每台PC的名称和其他PC的总数,怎么办?
答案 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