仅使用一个整数数据项显示3个数据字段的SQL查询

仅使用一个整数数据项显示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; 写一个网页,列出一年内每种产品的销售额(数量和价格)。用

我有两个单独的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;
    
    最重要的是,我需要能够通过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
    ,它们可能都是相同的东西)