仅使用一个整数数据项显示3个数据字段的SQL查询
我有两个单独的csv表,其中包含可以通过另一个网页添加到的自动数据。这不是静态数据,而是动态和可变的 我的目标是:仅使用一个整数数据项显示3个数据字段的SQL查询,sql,sum,inner-join,Sql,Sum,Inner Join,我有两个单独的csv表,其中包含可以通过另一个网页添加到的自动数据。这不是静态数据,而是动态和可变的 我的目标是: SELECT Products.Name, SUM(MonthlySales.SalesVolume) as 'Total Sales' FROM Products INNER JOIN MonthlySales ON Products.Id=MonthlySales.Id GROUP BY Products.Name; 写一个网页,列出一年内每种产品的销售额(数量和价格)。用
SELECT Products.Name, SUM(MonthlySales.SalesVolume) as 'Total Sales'
FROM Products
INNER JOIN MonthlySales
ON Products.Id=MonthlySales.Id
GROUP BY Products.Name;
SELECT Products.Name, SUM(MonthlySales.SalesVolume) as 'Total Sales'
FROM Products
INNER JOIN MonthlySales
ON Products.Id=MonthlySales.Id
GROUP BY Products.Name;
最重要的是,我需要能够通过php传递一个值(年份)(我有能力这样做),以进一步缩小搜索范围。我这样做对吗
示例数据:
MonthlySales.csv
Id ProductCode Month Year SalesVolume
23041 121 1 1980 983
23042 121 2 1980 960
23043 121 3 1980 939
23044 121 4 1980 927
23045 121 5 1980 931
23046 121 6 1980 950
23047 121 7 1980 975
Products.csv
Id,Name,Price
121,Jelly beans,6.79
122,Banana milkshake powder,8.31
123,Edam Cheese,18.73
124,Hairnet,8.05
125,Aubergine jam,2.66
最后,我需要显示如下内容:
您选择的年份:1980年
Name Price Volume
Jelly Beans 6.79 11000
Banana milkshake powder 8.31 15000
任何帮助都将不胜感激。只要
Name
是唯一的,你所拥有的一切都会有用,但这可能不是最好的方法。这可能更准确,因为您将根据主键Id
而不是Name
字段建立组
DECLARE @year char(4) = /*your year - datatype should be same as your year col*/;
DECLARE @month int = /*your month - datatype should be same as your month col*/;
SELECT Products.Name, Products.Price, Sales.totalSales AS 'Total Sales'
FROM Products
INNER JOIN (
SELECT MonthlySales.ProductCode,
SUM(MonthlySales.SalesVolume) AS 'totalSales'
FROM MonthlySales
WHERE MonthlySales.Year = @year AND MonthlySales.Month = @month
GROUP BY MonthlySales.ProductCode
) AS Sales ON Sales.Id = Products.ProductCode
只要
Name
是唯一的,您所拥有的一切都会起作用,但这可能不是最好的方法。这可能更准确,因为您将根据主键Id
而不是Name
字段建立组
DECLARE @year char(4) = /*your year - datatype should be same as your year col*/;
DECLARE @month int = /*your month - datatype should be same as your month col*/;
SELECT Products.Name, Products.Price, Sales.totalSales AS 'Total Sales'
FROM Products
INNER JOIN (
SELECT MonthlySales.ProductCode,
SUM(MonthlySales.SalesVolume) AS 'totalSales'
FROM MonthlySales
WHERE MonthlySales.Year = @year AND MonthlySales.Month = @month
GROUP BY MonthlySales.ProductCode
) AS Sales ON Sales.Id = Products.ProductCode
您应该使用
groupbyproducts.ID
而不是Products.Name
。除此之外,它看起来还不错。我想这应该是打开的。您好,谢谢您的回复,我已经尝试过了,但是收到了错误消息:Msg 8120,级别16,状态1,第1行列“Products.Name”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。很抱歉我现在明白了。Products.Id=MonthlySales.Id上的看起来大错特错。也许应该是产品上的。Id=MonthlySales.ProductCode
您应该使用按产品分组.Id
而不是产品.Name
。除此之外,它看起来还不错。我想这应该是打开的。您好,谢谢您的回复,我已经尝试过了,但是收到了错误消息:Msg 8120,级别16,状态1,第1行列“Products.Name”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。很抱歉我现在明白了。Products.Id=MonthlySales.Id上的看起来大错特错。也许它应该是Products.Id=MonthlySales.ProductCode上的,好的,那么这是否需要我有一个名为“Sales”的新表,以totalSales作为列?如果我对发生的事情视而不见,我很抱歉。在SQL management studio中(在将SQL查询传递给我的PHP之前,我在这里测试SQL查询),我是否已经为年和月设置了数据类型值?@Haxxx否,它正在为选择查询应用别名。与在SUM
上发生的事情几乎相同,但却发生在查询/表上。实际上,您可以从Products p执行相同的操作,而不是使用选择Products.Name
,您可以使用选择p.Name
。试试这个查询,让我知道它是如何工作的。我必须查找集合部分,我主要使用的是T-SQL,MySQL语法略有不同。在去掉集合部分并将“at”year改为CHAR(4),将“at”month改为int之后,他们的成功与否参差不齐。这套设备似乎根本不起作用,会返回错误吗?其中,在查询中将“at”year更改为CHAR(4),没有错误。但是将“at”月改为int没有被认可?它仍然为Sales.totalSales提供了一个错误,并在最下面一行显示AS旁边的Sales?@Haxxx您使用的是什么数据库?这很重要。您应该将DECLARE
设置为年份。例如:DECLARE@year char(4)='1980'
。此外,数据类型char(4)
和int
应分别与数据库中的年份和月份相同。(提示:它们可能不是char(4)
或int
,它们可能都是相同的东西)好的,那么这是否需要我有一个名为“Sales”的新表,其中totalSales作为一列?如果我对发生的事情视而不见,我很抱歉。在SQL management studio中(在将SQL查询传递给我的PHP之前,我在这里测试SQL查询),我是否已经为年和月设置了数据类型值?@Haxxx否,它正在为选择查询应用别名。与在SUM
上发生的事情几乎相同,但却发生在查询/表上。实际上,您可以从Products p执行相同的操作,而不是使用选择Products.Name
,您可以使用选择p.Name
。试试这个查询,让我知道它是如何工作的。我必须查找集合部分,我主要使用的是T-SQL,MySQL语法略有不同。在去掉集合部分并将“at”year改为CHAR(4),将“at”month改为int之后,他们的成功与否参差不齐。这套设备似乎根本不起作用,会返回错误吗?其中,在查询中将“at”year更改为CHAR(4),没有错误。但是将“at”月改为int没有被认可?它仍然为Sales.totalSales提供了一个错误,并在最下面一行显示AS旁边的Sales?@Haxxx您使用的是什么数据库?这很重要。您应该将DECLARE
设置为年份。例如:DECLARE@year char(4)='1980'
。此外,数据类型char(4)
和int
应分别与数据库中的年份和月份相同。(提示:它们可能不是char(4)
或int
,它们可能都是相同的东西)