我有一些查询返回此值:
model model speed ram
1121 1233 750 128
1232 1233 500 64
1232 1260 500 32
1233 1121 750 128
1233 1232 500 64
1260 1232 500 32
我不需要重复数据,例如:
1121 1233 750 128
1233 1121 750 128
相同,但模型顺序不同。
所有数据存储在一个表中。有很多具有不同型号的PC。我需要具有相同速度和内存的PC,但是存在一些问题(如上所述)。 这是我的查询:
SELECT a.model, b.model, a.speed, a.ram
FROM PC AS a, PC AS b
WHERE a.speed = b.speed AND a.ram = b.ram AND a.model != b.model
ORDER BY a.model DESC, b.model ASC
答案 0 :(得分:3)
在现有查询中,将a.model != b.model
更改为a.model > b.model
将为您提供所需的输出。
SELECT a.model, b.model, a.speed, a.ram FROM PC AS a, PC AS b
WHERE a.speed = b.speed AND a.ram = b.ram
and a.model > b.model
ORDER BY a.model DESC, b.model ASC
建议对查询使用显式JOIN
。
您可以按以下方式更改查询。
SELECT a.model, b.model, a.speed, a.ram
FROM PC AS a
inner join PC AS b on a.speed = b.speed and a.ram = b.ram and a.model > b.model
ORDER BY a.model DESC, b.model ASC
答案 1 :(得分:3)
最简单的方法是将查询更改为使用<
:
SELECT a.model, b.model, a.speed, a.ram
FROM PC a JOIN
PC b
ON a.speed = b.speed AND a.ram = b.ram AND
a.model < b.model
ORDER BY a.model DESC, b.model ASC;
请注意,这还会修复您的FROM
子句,以使用正确的,明确的标准 JOIN
语法。
答案 2 :(得分:0)
我不确定您是否对型号真正感兴趣。
如果没有,您可以尝试以下方法:
SELECT speed,
ram,
COUNT(*) AS number_models,
MIN(model) AS min_model,
MAX(model) AS max_model
FROM pc
GROUP BY speed,
ram
ORDER BY speed,
ram;
答案 3 :(得分:0)
如果您以{em> DBMS 的身份使用Oracle
,PostGres
或MySQL
,则更喜欢使用least
和greatest
可以与分组一起使用,如下所示
select distinct least(model1,model2) as model1,
greatest(model1,model2) as model2,
speed, ram
from pc
group by greatest(model1,model2), least(model1,model2), speed, ram;
model1 model2 speed ram
1121 1233 750 128
1232 1233 500 64
1232 1260 500 32