繁体   English   中英

MySQL计算列值实例并按列值排序

[英]MySQL counting instances of column values and sorting by column value

我有一个相当高级的查询,我需要在一个表上进行保存客户发送的故障单,收集有关故障单的统计信息以及按各种计数和/或列值进行排序和排序。

门票表:

+---------------------------+       
| 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
  ]
]

然后,我需要能够按每个问题的出现次数进行排序,例如: ORDER BY COUNT(missing-part)COUNT(broken-part) 在其他情况下,我只需要能够按总问题数而不是问题值本身来订购产品(因此,按COUNT(issues)订购)即可。

谢谢!

yu可以使用subselect来计数product_id的出现,并使用main select来进行issuse的计数

  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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM