代用相关查询
的我有表名订单:代用相关查询
id id_o value date 1 1 400 2014-09-30 2 1 300 2014-09-30 3 1 200 2014-09-30 4 2 100 2014-09-30 5 2 200 2014-09-30 6 3 50 2014-09-29 7 3 100 2014-09-29 8 4 300 2014-09-29 9 5 600 2014-09-28
我需要选择由输出ID_o用总和(值)分组的每一个顺序< 700并从该选择的表,我需要通过分组数据的显示数据。 我使用了多个选择:
select date, sum(mno) as mn
from (
select date,sum(value) as 'mno'
from orders
group by id_o
having sum(value)<700
) table_alias
group by date
这是结果:
date mn 2014-09-30 300 2014-09-29 450 2014-09-28 600
是否有可能替代或简化此相关的查询?
您的内部查询无效。它由id_o
分组,但由date
选择。为了解决这个问题,在内部查询分组中添加一个额外的列(假设每个id_o
的日期总是相同的)。您可以通过启用sql_mode
的ONLY_FULL_GROUP_BY
来启用强大的检查。完整示例SQL fiddle。
SELECT
date,
SUM(mno) AS mn
FROM (
SELECT
id_o,
date,
SUM(value) AS mno
FROM orders
GROUP BY
id_o,
date
HAVING
SUM(value) < 700
) totalPerOrder
GROUP BY date
MySQL允许这种类型的查询,但这样做并不常见。请看下面的数据:
id id_o value date 1 1 400 2014-09-29 2 1 300 2014-09-30 3 1 200 2014-09-30
什么date
(S)将SELECT date, SUM(value) FROM orders GROUP BY id_o
返回?它可能是第一个,最后一个,平均,最常见的一个,但更好地明确。任何其他DBMS都不会让您执行此查询。
除此之外,我会重新命名一些列以便更具表现力。 mn
,mn_o
和id_o
就是这样的例子。另外value
没有任何描述,任何东西都可以是一个值。即使date
字段本来可以称为value
。查询本身看起来很好(尽管可能缺少索引,但请注意)。
为什么内部选择无效?但它的工作。列id_o在下一个处理中并不重要,它仅在“group by”子句中使用。你为什么用id_o使用多个组,日期?我尝试过,但结果与“group by id_o”相同。有什么办法可以用更简单的东西来替代这个多选?我读了类似的多重选择非常加载数据库服务器。 – user3752452 2014-09-26 20:50:40
我在回答中添加了一个示例,我希望它可以帮助,但如果没有,请告诉我。 – Caramiriel 2014-09-27 15:43:37
你的查询是好的(列别名周围的单引号除外)。你的术语是错误的。这不是一个相关的子查询。 – 2014-09-26 11:29:46
请注意,您的子查询会选择日期,但会分组id_o。 MySQL允许这样做 - 但它有点奇怪! – Strawberry 2014-09-26 11:37:34
好吧,所以这是不相关的查询,但多选。有什么办法可以用更简单的东西来替代这个多重选择,例如简单的查询?或者在数据库加载方面可以吗? – user3752452 2014-09-26 21:00:17