php - mysql 将数据分成一周中的几天

标签 php mysql

美好的一天,

我目前正在制作销售跟踪报告,用户选择一个日期范围,然后表格应显示结果。

现在我有这个查询来计算已售出的商品数量

select x_transaction_details.xitem, 
       SUM(x_transaction_details.qty) as totalNumberSold, 
       count(x_transaction_details.xitem) as occurence, 
       x_transaction_details.cost, 
       i_inventory.xitem, 
       x_transaction_details.date_at as transDate
from x_transaction_details
   left join i_inventory on x_transaction_details.xitem = i_inventory.xid
where (x_transaction_details.date_at BETWEEN '2015-08-13 08:34:12' AND '2015-09-14 08:34:12')
GROUP BY x_transaction_details.xitem
ORDER BY occurence DESC

此查询显示

|itemName| totalNumberSold | occurence | date
|item 1  | 23 pcs          |  2        |
|item 2  | 18 pcs          |  6        |
|item 3  | 203 pcs         |  18       |
etc..

现在我想知道每天的销售额明细,所以我尝试了

select x_transaction_details.xitem, 
       SUM(x_transaction_details.qty) as sold, 
       count(x_transaction_details.xitem) as occurence,
       x_transaction_details.cost, 
       i_inventory.xitem, 
       x_transaction_details.date_at as transDate
       SUM(CASE WHEN date_at = DAYOFWEEK(1) THEN    
                 count(x_transaction_details.xitem) END) as Sunday
from x_transaction_details
  left join i_inventory on x_transaction_details.xitem = i_inventory.xid
where (x_transaction_details.date_at BETWEEN '2015-08-13 08:34:12' AND '2015-09-14 08:34:12')
GROUP BY x_transaction_details.xitem
ORDER BY occurence DESC

但它反而生成了一个错误。我想创建一个更详细的表格

|itemName|Mon|Tue|Wed|Thur|Fri|Sat|Sun| totalNumberSold | occurence | date
|item 1  | 10|  0| 0 | 13 | 0 |0  |0  | 23 pcs          |  2        |
|item 2  | 1 |  3| 12|  0 | 16|0  |0  | 32 pcs          |  6        |
|item 3  | 0 |  6| 1 | 13 | 8 |7  |1  | 36 pcs          |  12       |
etc..

感谢您的提示,我也可以使用 php (硬方法)制作此表,但我想它也可以使用 sql 查询。祝你有美好的一天。

最佳答案

您缺少逗号和嵌套聚合函数。我想你想要:

select i.xid, SUM(td.qty) as sold, count(td.xitem) as occurrence,
       avg(td.cost) as avg_cost, i.xitem,
       SUM(case when DAYOFWEEK(td.date_at) = 1 then td.qty else 0 end) as Sunday
from i_inventory i join
     x_transaction_details td       
     on td.xitem = i.xid
where td.date_at BETWEEN '2015-08-13 08:34:12' AND '2015-09-14 08:34:12'
GROUP BY i.xid
ORDER BY occurrence DESC;

注释:

  • “occurrence”有两个 r。
  • 表别名使查询更易于编写和阅读。
  • 不能嵌套聚合函数。
  • 您不应在选择列表中包含date_at,因为每行的值并不唯一。
  • 左联接要么是向后的(库存应该先行),要么应该是内联接。在正确形成的数据库中,交易表中不应包含库存表中没有的项目(我不这么认为)。

关于php - mysql 将数据分成一周中的几天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797594/

相关文章:

php - 使用 PHP 进行即时搜索

MySQL查询内部查询

php - 不存在的PHP解析错误在线

php - 如果未找到 mysql 列,$result 不等于任何内容?

php - 选择动态创建的字段

php - 使用php从android访问数据库获取 "<HTML>"而不是查询结果

android - 在Android应用程序中使用从mysql转换而来的sqlite数据库

php - MySQL 数据库中的乱码文本

javascript - 检查文本框值是根据前缀

php - 使用参数在同一页面上提交表单 - GET 方法