即使被排序的列不在`SELECT`语句中,`ORDER BY`也会更改查询结果

时间:2014-12-08 19:09:48

标签: sql oracle group-by sql-order-by

我正在处理一些Oracle PL / SQL视频,并且我到达了一个讨论查询对我来说没有意义的部分。特别是,ORDER BY子句的结果如何影响生成的查询。

看看这个表结构:

分类

  • category_id(PK)
  • parent_id
  • 名称

显示

  • show_id(PK)
  • category_id(FK)
  • act_id(FK)
  • venue_id(FK)
  • 名称
  • showdate相似
  • price_multiplier

类别和显示表之间的关系为0到1或很多(因此对于任何类别,Show表中可能有0个或更多记录)。

如果ORDER BY不是SELECT语句中列出的列/字段,GROUP BY子句如何修改COUNT (DISTINCT s.show_id)子句所实现的内容

查询:

SELECT c.name, COUNT(DISTINCT s.category_ID) "First Categories"
FROM category c, show s
WHERE c.category_id = s.category_id
GROUP BY c.name
ORDER BY COUNT (DISTINCT s.show_id);

(这是对投票的回应:我想解决这个问题,因为我在广泛发布之前以及在外面发帖时已经在主板上搜索了答案。我觉得这个例子涵盖了很多GROUP BY,SELECT和ORDER BY子句之间的基本和重要概念,可能对正在学习的其他人有帮助,因为它是一个足够独特的例子,但基本足以掌握并应用在路上。)

慷慨地谢谢你!

1 个答案:

答案 0 :(得分:0)

COUNT (DISTINCT s.show_id)的计算仍然适用于c.name的每一组,并且生成的行根据它进行排序 - 它不会显示在最终结果集中。