Mysql 组合数据库查询

Mysql 组合数据库查询,mysql,sql,Mysql,Sql,如何将这些从数据库中提取统计信息的SQL查询组合起来以获得更好的性能 $total= mysql_query("SELECT COUNT(*) as number, SUM(order_total) as sum FROM history"); $month = mysql_query("SELECT COUNT(*) as number, SUM(order_total) as sum FROM history WHERE date >= UNIX_TIMESTAMP(DATE_ADD(

如何将这些从数据库中提取统计信息的SQL查询组合起来以获得更好的性能

$total= mysql_query("SELECT COUNT(*) as number, SUM(order_total) as sum FROM history");
$month = mysql_query("SELECT COUNT(*) as number, SUM(order_total) as sum FROM history WHERE date >= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL -30 DAY))");
$day = mysql_query("SELECT COUNT(*) as number, SUM(order_total) as sum FROM history WHERE date >= UNIX_TIMESTAMP(CURDATE())");

由于查询具有相同的列结构,您可以要求MySQL将它们与UNION操作结合起来:

(SELECT 'total' AS kind, COUNT(*) as number, SUM(order_total) as sum FROM history~
UNION
(SELECT 'by-month' AS kind, COUNT(*) as number, SUM(order_total) as sum FROM history WHERE date <= UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL -30 DAY)))
UNION
(SELECT 'by-day' AS kind, COUNT(*) as number, SUM(order_total) as sum FROM history WHERE date <= UNIX_TIMESTAMP(CURDATE()))

如果要在单个查询中保存所有数据,有两种选择:

使用联合查询 调整查询以在一行中获取所需内容 我将显示选项2选项1已经涵盖

注意:我正在使用填充在init子查询中的用户变量,以避免反复编写表达式。另外,为了过滤聚合数据,我使用case。。。结束语

选择 -您的第一个查询: 将*计为数字,将总数计为`总和` -您的第二个问题:
,sumcase当'date'时,请尝试使用英语询问堆栈溢出。我已经对你的问题进行了编辑,使用了我认为准确的翻译。我建议你尝试一下在哪里可以用俄语提问和回答任何问题,这样你就可以为社区制定一个可以理解的答案。如果你不介意多行,那么UNION或UNION都可以。如果您想将此结果折叠成一行,请检查下面的答案。对不起。首先,我把英语stackoverflow和俄语stackoverflow混淆了。第二,我把“=”弄糊涂了,我把它修好了。谢谢你的回答。但是我不明白在您的查询中什么是“按月”、“按天”和“~”。常量列total、by month和by day标记了三行结果集中的每一行,以便您知道哪一行是合计。