Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何列出一个城市每个月显示利润的所有地区_Mysql_Sql - Fatal编程技术网

Mysql 如何列出一个城市每个月显示利润的所有地区

Mysql 如何列出一个城市每个月显示利润的所有地区,mysql,sql,Mysql,Sql,我需要列出一个城市中每个月都有盈利的地区 我不知道如何将计数值联系起来​​子查询中月份为的产品的 有人能帮我一下吗 SELECT districts.id, districts.name, mmonth.m10 FROM districts INNER JOIN (SELECT SUM(product_order.price_of_day * product_order.amount) AS m10 FROM product_

我需要列出一个城市中每个月都有盈利的地区

我不知道如何将计数值联系起来​​子查询中月份为的产品的

有人能帮我一下吗

SELECT 
       districts.id,
       districts.name,
       mmonth.m10
FROM districts
INNER JOIN
  (SELECT 
       SUM(product_order.price_of_day * product_order.amount) AS m10
   FROM product_order
   INNER JOIN orders ON product_order.order_id = orders.id
   WHERE MONTH(orders.date_time) = 10 ) mmonth
INNER JOIN cities ON cities.id = districts.city_id
WHERE cities.id = 2;

看看我需要什么

| id |     name   | m10 | m11 | m12 |
------------------------------------
|  3 | district 3 | 730 | 360 | 453 |
------------------------------------
|  4 | district 4 | 730 | 250 | 856 |
-------------------------------------
我该如何计算这样的月份数

| id |     name   | m10 | m11 | m12 | total |
---------------------------------------------
|  3 | district 3 | 730 | 360 | 453 | 1543  |
---------------------------------------------
|  4 | district 4 | 730 | 250 | 856 | 1836  |
---------------------------------------------
编辑:

这应该做到:

SELECT 
       districts.id,
       districts.name,
       SUM(IF(MONTH(orders.date_time) = 10, product_order.price_of_day * product_order.amount, 0)) AS m10,
       SUM(IF(MONTH(orders.date_time) = 11, product_order.price_of_day * product_order.amount, 0)) AS m11,
       SUM(IF(MONTH(orders.date_time) = 12, product_order.price_of_day * product_order.amount, 0)) AS m12,
       SUM(product_order.price_of_day * product_order.amount) AS total
FROM cities
LEFT JOIN districts ON cities.id = districts.city_id
LEFT JOIN orders ON orders.district_id = districts.id
LEFT JOIN product_order ON product_order.order_id = orders.id
WHERE cities.id = 2
GROUP BY districts.id;

您应该使用
分组依据
(请参阅:)

添加一个total列非常简单,您只需删除
案例。。。什么时候然后。。。其他的结束
,然后将它们相加;下面的代码也已修改为使用
左连接
,以确保如果该城市存在没有订单的地区,该地区仍将以每月值0列出(有关更多信息,请参阅:)


只需返回一个分组有序的结果。处理表示层/应用程序级代码中的数据显示问题,如果您有一个问题(例如,一点PHP),您需要使用如上所述的
GROUP BY
,并且上面的问题没有给出订单如何链接到地区的足够详细信息(我接受指向SQLFiddle的链接,但它通常离我更近一些才好)。我刚刚更新了答案中的代码(在SQL Server中工作),尽管结果与上面显示的不太匹配:-SThanks@talegna!我如何计算月份数?@Borre已经回答了,但我的方法
sum也是一样的(产品订单.日价格*产品订单.金额)AS Total
感谢您的帮助。我也想到了类似的方法。问题是它返回的所有地区的值都相同。您是对的,我一定是误读了。我更新了我的答案以反映您的问题谢谢@Borre!我该如何计算月份数?答案已更新,以包含每个地区的总数
SELECT
    [IdentifyingDataColumnName]
    ...
    ,[IdentifyingDataColumnName1]
    ,[CalculatedField] =  SUM(<column name(/s) / Calculation to sum>)
FROM
    Table 1
    LEFT JOIN 2
GROUP BY
    [IdentifyingDataColumnName]
    ...
    ,[IdentifyingDataColumnName1]
HAVING  
    SUM(<column name(/s) / Calculation to sum>) > 0
SELECT 
    districts.id
    ,districts.name
    ,SUM(CASE WHEN MONTH(orders.date_time) = 10 THEN (product_order.price_of_day * product_order.amount) ELSE 0 END) AS m10
    ,SUM(CASE WHEN MONTH(orders.date_time) = 11 THEN (product_order.price_of_day * product_order.amount) ELSE 0 END) AS m11
    ,SUM(CASE WHEN MONTH(orders.date_time) = 12 THEN (product_order.price_of_day * product_order.amount) ELSE 0 END) AS m12
FROM 
    districts 
    INNER JOIN cities ON cities.id = districts.city_id
    INNER JOIN orders ON districts.id = orders.district_id
    INNER JOIN product_order ON product_order.order_id = orders.id
WHERE 
    cities.id = 2
GROUP BY 
    districts.id
    ,districts.name
SELECT 
    districts.id
    ,districts.name
    ,SUM(CASE WHEN MONTH(orders.date_time) = 10 THEN (product_order.price_of_day * product_order.amount) ELSE 0 END) AS m10
    ,SUM(CASE WHEN MONTH(orders.date_time) = 11 THEN (product_order.price_of_day * product_order.amount) ELSE 0 END) AS m11
    ,SUM(CASE WHEN MONTH(orders.date_time) = 12 THEN (product_order.price_of_day * product_order.amount) ELSE 0 END) AS m12
    ,SUM(product_order.price_of_day * product_order.amount) AS Total
FROM 
    districts 
    INNER JOIN cities ON cities.id = districts.city_id
    LEFT JOIN orders ON districts.id = orders.district_id
    LEFT JOIN product_order ON product_order.order_id = orders.id
WHERE 
    cities.id = 2
GROUP BY 
    districts.id
    ,districts.name