【问题标题】:SQL aggregation with where带有 where 的 SQL 聚合
【发布时间】:2022-01-20 07:20:36
【问题描述】:

我们有下表: |姓名 |腿| 高分辨率照片| CLIPARTO重量| |--------|-----|--------| |鸟 |2 |6 | |猫 |4 |10 | |狗 |4 |20 | |雪貂|4 |10 | |企鹅|2 |10 | |霸王龙 |2 |12000 | 如果我运行第一个查询:

select min(legs), max(weight), name from animals;

结果是: |分钟(腿)|最大(重量) |姓名| |--------|-----|--------| |2 |12000 |霸王龙| 如果我运行第二个查询,在其中添加 where 条件:

select min(legs), max(weight), name from animals where name <> "t-rex";

结果是: |分钟(腿)|最大(重量) |姓名| |--------|-----|--------| |2 |20 |狗 |

我不明白为什么在第二种情况下名字是狗。我的理解是我们排除了 t-rex 行,并从其余行进行查询。然后我们选择腿的最小值,即2,重量的最大值,即20。显然腿2的最小值和重量20的最大值不在同一行。

【问题讨论】:

  • 您希望从查询中得到什么名称?

标签: sqlite


【解决方案1】:

name 本身就是一个bare column 并且将是一个任意的name

解决该问题的示例(假设您想要 2 条腿的动物的最大重量,但不是 t-rex):-

SELECT legs,weight,name 
FROM animals 
WHERE name <> 't-rex' 
ORDER BY legs ASC, weight DESC 
LIMIT 1;

WITH cte AS (SELECT * FROM animals WHERE legs = (SELECT min(legs) FROM animals))
SELECT legs,weight,name 
FROM cte 
WHERE name <> 't-rex' 
ORDER BY weight 
DESC LIMIT 1;

两者都会导致:-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多