Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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_Codeigniter 3 - Fatal编程技术网

Mysql 使用组函数排除少数字段-链接多个表而不将其数据与另一个表混合-对动态表执行查询

Mysql 使用组函数排除少数字段-链接多个表而不将其数据与另一个表混合-对动态表执行查询,mysql,codeigniter-3,Mysql,Codeigniter 3,我几乎没有CRM应用程序的表,我正在编写sql查询,以便在仪表板上显示所有数据的摘要 假设有3个表,一个是订单,有不同的客户类型,如本地、州际、国际。 二是ecom订单,三是费用(包括工资、资产购买等) (注意:这只是一个示例。实际数据和实际表非常大,并且有很多连接..) 在所有三个表中都有一个字段total_amount 我试图展示: SUM(表1.总金额)及其计数 总金额(表1.总金额),客户类型为本地、州际、国际。和它的计数 年度金额(表1.总金额)及其计数 每月金额(表1.总金额)及其

我几乎没有CRM应用程序的表,我正在编写sql查询,以便在仪表板上显示所有数据的摘要

假设有3个表,一个是订单,有不同的客户类型,如本地、州际、国际。 二是ecom订单,三是费用(包括工资、资产购买等)

(注意:这只是一个示例。实际数据和实际表非常大,并且有很多连接..)

在所有三个表中都有一个字段total_amount

我试图展示:
SUM(表1.总金额)及其计数

  • 总金额(表1.总金额),客户类型为本地、州际、国际。和它的计数
  • 年度金额(表1.总金额)及其计数
  • 每月金额(表1.总金额)及其计数
现在我还想从表2和表3中选择相同的

所有这些将进一步细分为sum(表.总金额)和count(表.总金额),状态为dispatched/delivered/pending等 每年和每月都是如此

那么,这在单个查询中是否可能

在某些地方,我只需要显示一个数字。。在某些地方,我想用GROUPBY显示表数组

到目前为止,我已经为此尝试了case语句,但这使得我的查询非常长,所以我尝试在编写它时不使用case语句,比如sum和count等,以及group by a client_id或其他什么。。它给了我正确的数据。。但是,当我使用组时,它并没有显示我在该组中的所有总计。。 哪种方法是正确的?案例陈述还是子查询? 因为我想把所有这些都写在一个查询中。。或者它不能单独工作,我必须为每个表编写单独的查询和函数

请导游。。如有任何建议和示例,将不胜感激

更新:-


更新2

overall_total_amount -- overall_total_count -- over_total_amount_this_year - overall_total_count_this_year 
年度订单总数金额和计数。。即月份(一月、二月、三月和所有月份) 每月订单总数金额和计数。。(该日期为本月每天的日期)

订单总额和客户数量-即>

client_type1 > total_amount_over_all > total_count 

client_type2 > total_amount_over_all > total_count
等等。。 每年和每月都一样

client_type1 > jan_total_amount > total_count
client_type1 > feb_total_amount > total_count
client_type2 > jan_total_amount > total_count
client_type2 > feb_total_amount > total_count
同样适用于月,其中月将取代日日期

///这仅适用于一个模块表,但 我有12-13个这样的。。 我知道如何做到这一点是独立的查询和php函数。。但是考虑在单个查询中执行此操作。。 因为所有的表都会进行相同的计算,只是会根据存储在表中的数据返回不同的数据。我要计算的字段也有相同的名称,所以如果我为每个表复制相同的查询12-13次,并最终更改表名以显示输出,那将是非常愚蠢的。。在那里,我正在寻找一种方法,在这种方法中,我可以提取动态表上所需的所有数据,并在每个数据前面分配一个id和它们各自的表名,然后通过双重分组对其执行查询。。 希望在单个页面(即仪表板页面)上以单独的分区/块显示所有内容。所有表格都有total_amount和created、dispatched等日期字段

所以在仪表板上,我可以随时给他们打电话。。另外,对于一些会有数组,对于一些会有单字段结果。。在sql或php中,在单个函数/查询中两者都有可能吗? like-对于sales total,只有一个字段给出结果,对于sales montly、categorywise或clientwise,将有一个数组列表。。 我认为解决方案是编写一个查询来显示类似这样的结果(不确定我说的是否可能) 日期--客户端类型--类别--总金额--计数--状态--模块组--(动态\u id)

然后在此表上再运行一个查询,如 -将客户端类型为1的所有id计数为总客户端类型 -将所有总金额相加,其中模块组为订单组,年为当前年度组(按月)(将输出月数组)

我不知道如何创建所需输出的布局,这就是我在文本中解释的原因

更新-3

我想要这样的输出。。我在同一个表中有日期数据和总计。客户机和状态按照与行一起获取的特定顺序存储。 如果我得到这个,那么我想对这个执行查询。。如-sum(total_amount),其中年份为2019年,从表中派生的_为零售订单,则选择状态为dispatched且从表中派生的为ecom的所有

更新4 我还有一个问题与此有关

SELECT
DATE_FORMAT(o.created_on, '%d-%b-%Y') AS retail_daily_date,
            SUM(o.total_amount) as retail_daily_total ,
            COUNT(o.total_amount) as retail_daily_count
        FROM
            orders o
            LEFT JOIN client c ON c.client_id = o.client_id
           WHERE
            YEAR(o.created_on) = YEAR(CURRENT_DATE())
            AND MONTH(o.created_on) = MONTH(CURRENT_DATE())
            AND c.client_type = 3
            AND o.is_deleted = 0
                        GROUP BY
          DATE_FORMAT(o.created_on, '%d-%m-%Y') 
        ORDER BY
          DATE_FORMAT(o.created_on, '%d-%Y-%m')
它将按日期输出每日订单总数 日期总数 2010年1月1日5000 2000年1月2日6

等等

我希望所有客户都有一张桌子。。因此,每次我编写相同的查询时,只需更改客户机类型1、2、3、4,以此类推即可得到结果


如何在一个查询中做到这一点

如果您向我们展示您正在讨论的表的模式,它将有助于为您提供一些信息assistance@RiggsFolly刚刚更新了这个问题。。请检查将文本张贴到问题中总是更好的,图片不是那么有用。特别是当它实际上切断了一些列时,请参见SHOW CREATE TABLE YourTableName然后复制/粘贴到您的问题您使用什么来发出此命令如果您向我们展示您正在谈论的表的模式,这将有助于为您提供一些信息assistance@RiggsFolly刚刚更新了这个问题。。请检查将文本张贴到问题中总是更好的,图片不是那么有用。特别是当它实际上切断了一些列时,请参见SHOW CREATE TABLE YourTableName然后复制/粘贴到您的问题您使用什么来发出此命令
SELECT
DATE_FORMAT(o.created_on, '%d-%b-%Y') AS retail_daily_date,
            SUM(o.total_amount) as retail_daily_total ,
            COUNT(o.total_amount) as retail_daily_count
        FROM
            orders o
            LEFT JOIN client c ON c.client_id = o.client_id
           WHERE
            YEAR(o.created_on) = YEAR(CURRENT_DATE())
            AND MONTH(o.created_on) = MONTH(CURRENT_DATE())
            AND c.client_type = 3
            AND o.is_deleted = 0
                        GROUP BY
          DATE_FORMAT(o.created_on, '%d-%m-%Y') 
        ORDER BY
          DATE_FORMAT(o.created_on, '%d-%Y-%m')