Php MySQL计算列值实例并按列值排序
我需要在一个表上执行一个相当高级的查询,该表保存客户发送的故障单,收集有关故障单的统计信息,并按各种计数和/或列值排序 票务表:Php MySQL计算列值实例并按列值排序,php,mysql,sql,Php,Mysql,Sql,我需要在一个表上执行一个相当高级的查询,该表保存客户发送的故障单,收集有关故障单的统计信息,并按各种计数和/或列值排序 票务表: +---------------------------+ | product_id | issue | +------------|--------------+ | 1 | missing-part | | 1 | missing-part | | 1 | broken-part
+---------------------------+
| product_id | issue |
+------------|--------------+
| 1 | missing-part |
| 1 | missing-part |
| 1 | broken-part |
| 2 | broken-part |
| 2 | broken-part |
| 2 | missing-part |
| 2 | missing-part |
| 2 | missing-part |
+---------------------------+
首先,我需要计算每个产品的总票数。在这种情况下,product_id 1
有3张票据,product_id 2
有5张票据。然后,我需要获得issue
列的值以及每个列的出现次数。所以在这一点上,我期待着这样的事情:
[
'product_id' => 1,
'issues' => 3
'issue_nums' => [
'missing-part' => 2,
'broken-part' => 1
]
],
[
'product_id' => 2,
'issues' => 5,
'issue_nums' => [
'missing-part' => 3,
'broken-part' => 2
]
]
然后,我需要能够根据每个问题的出现次数进行排序,例如:按计数排序(缺少部分)
或计数(损坏部分)
。在其他情况下,我只需要能够按总发行量订购产品,而不是按发行量本身订购(因此按COUNT(issues)
订购)
谢谢 yu可以使用子选择进行计数产品id出现,使用主选择进行发布
select t1.product_id, t2.product_count, t1.issue, count(*) count_issue
from Tickets t1
inner join (
select product_id, count(*) product_count
from Tickets
group by product_id) t2 on t2.product_id = t1.product_id
group by t1.product_id, t2.product_count, t1.issue
order by count_issue
yu可以为计数产品id发生使用子选择,为发行使用主选择
select t1.product_id, t2.product_count, t1.issue, count(*) count_issue
from Tickets t1
inner join (
select product_id, count(*) product_count
from Tickets
group by product_id) t2 on t2.product_id = t1.product_id
group by t1.product_id, t2.product_count, t1.issue
order by count_issue
您可以通过两个级别的聚合非常接近:
select t.product_id, sum(cnt) as total,
group_concat(issue, ':', cnt separator ',') as issues
from (select t.product_id, t.issue, count(*) as cnt
from tickets t
group by t.product_id, t.issue
) tp
group by t.product_id;
您可以通过两个级别的聚合非常接近:
select t.product_id, sum(cnt) as total,
group_concat(issue, ':', cnt separator ',') as issues
from (select t.product_id, t.issue, count(*) as cnt
from tickets t
group by t.product_id, t.issue
) tp
group by t.product_id;
您应该尝试自己编写代码。如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读一个好问题。请务必阅读和阅读。您正在寻找交叉表查询@JayBlanchard在问题中添加了一个SQL Fiddle来演示查询到目前为止的位置,并对问题进行了编辑以澄清查询需要添加哪些内容。您应该尝试自己编写代码。如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读一个好问题。请务必阅读和阅读。您正在寻找交叉表查询@JayBlanchard在问题中添加了一个SQL Fiddle来演示查询到目前为止的位置,并对问题进行了编辑以澄清查询需要添加哪些内容。感谢您的回答。我在问题中添加了一个SQLFiddle示例,演示了它目前所处的位置。基本上,那里的数据格式与需要的格式完全相同,除了
问题
列,该列应列出为产品提交的问题以及问题发生的次数。然后,我还需要能够按照问题出现的次数进行排序,例如,最高->最低数量的缺少的零件。这有意义吗?t1.issue和count_issue应返回,然后Issus提交和相关发生时间。。和order by CONU发布应按出现次数返回列表顺序。。谢谢你的回答。我在问题中添加了一个SQLFiddle示例,演示了它目前所处的位置。基本上,那里的数据格式与需要的格式完全相同,除了问题
列,该列应列出为产品提交的问题以及问题发生的次数。然后,我还需要能够按照问题出现的次数进行排序,例如,最高->最低数量的缺少的零件。这有意义吗?t1.issue和count_issue应返回,然后Issus提交和相关发生时间。。和order by CONU发布应按出现次数返回列表顺序。。下面是您的示例的一个SQL文档:。它几乎拥有所有功能,除了能够按问题发生顺序排列结果。例如:哪些产品的缺失零件最多
或损坏零件最多
?我接受了您的回答,并将问题的后半部分移至新问题以避免混淆。下面是您的示例的一个SQL文档:。它几乎拥有所有功能,除了能够按问题发生顺序排列结果。例如:哪些产品的缺失零件最多
或损坏零件最多
?我接受了您的回答,并将问题的后半部分移至新问题以避免混淆。