特定年份和地区的MySQL查询

特定年份和地区的MySQL查询,mysql,sql,database,Mysql,Sql,Database,我尝试进行查询,从中可以看到 2007年和2008年的美国和世界其他地区以及所有小计和总计(值得一提的是,美国和世界是区域,已经在数据库中编码) 我的问题是: SELECT country regionname, sum(custamot)Totsales FROM( select o.customerid, sum(netamount) custamot, c.country FROM orders o join customers c on o.customerid = c.custome

我尝试进行查询,从中可以看到 2007年和2008年的美国和世界其他地区以及所有小计和总计(值得一提的是,美国和世界是区域,已经在数据库中编码)

我的问题是:

SELECT country regionname, sum(custamot)Totsales 
FROM( select o.customerid, sum(netamount) custamot, c.country
FROM orders o join customers c
on o.customerid = c.customerid
where country like 'US' 
group by c.customerid ) iv;
这个查询只告诉我我们的总销售额(如你所见,没有一年)。 我尝试了不带零件的查询:

where country like 'US' 
但结果是一样的。我找不到一个查询,它向我展示了某一年的美国和世界

任何想法都会有帮助

感激地,
JOP

您需要在外部添加一个
group by
子句:

SELECT country as regionname, sum(custamot) as Totsales 
FROM (select o.customerid, sum(netamount) custamot, c.country
      FROM orders o join
           customers c
           on o.customerid = c.customerid
      group by c.customerid
     ) iv
group by country;
实际上,您不需要子查询:

select country as regionname, sum(netamount) as Totsales
FROM orders o join
     customers c
     on o.customerid = c.customerid
group by country;
要在同一查询中获得总数,请使用带有汇总的

select country as regionname, sum(netamount) as Totsales
FROM orders o join
     customers c
     on o.customerid = c.customerid
group by country with rollup;
最后,要添加年份,请使用
where
子句或尝试以下操作:

select year(orderdate) as yr, country as regionname, sum(netamount) as Totsales
FROM orders o join
     customers c
     on o.customerid = c.customerid
group by year(orderdate), country with rollup;
将我们和世界其他地区分开:

select year(orderdate) as yr,
       (case when country = 'US' then 'US' else 'ROW' end) as region,
       sum(netamount) as TotSales
FROM orders o join
     customers c
     on o.customerid = c.customerid
group by year(orderdate),  (case when country = 'US' then 'US' else 'ROW' end) with rollup;
大概是这样的:

SELECT country as regionname, sum(custamot)Totsales 
FROM( select o.customerid, sum(netamount) custamot, c.country
      FROM orders o join customers c
       on o.customerid = c.customerid
      where left(my_date,4) between 2007 and 2008
      group by c.customerid ) iv
group by country

萨卢多斯;)

要获得某一年的结果,假设您有一个日期字段

where YourDateField >= {d '2007-01-01'}
and YourDateField < {d '2008-01-01'}
其中YourDateField>={d'2007-01-01'}
和您的日期字段<{d'2008-01-01}

哇,谢谢。看起来很完美。我只是把where子句重新放进去,这样我就可以看到相关的字段了。像这样:像‘我们’这样的国家现在在哪里我的另一个问题是如何总结“世界其他地区”,当我尝试时:像‘世界’这样的国家在哪里我得到一张空桌子。但我还是试图得到一个结果表,在那里我可以看到4行:(2x US(2007年和2008年)和2x World(2007/2008年)年份部分不再是问题,只是世界部分,有什么想法吗?这太完美了。我就是这么做的。我还从一个朋友那里得到了提示,他告诉我需要一个案例。再次“感谢”: