2017-07-11 8 views
0

私は、顧客が送信したトラブルチケットを保持するテーブルで行う必要がある高度なクエリを持っています。チケットに関する統計を収集し、カウントおよび/または列の値。MySQLは列の値のインスタンスをカウントし、列の値でソートする

チケットテーブル:

+---------------------------+  
| 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列の値とそれぞれの出現数を取得する必要があります。したがって、この時点で、私はこのような何かを期待しています:ORDER BY COUNT(missing-part)またはCOUNT(broken-part):次に

[ 
    '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))。

ありがとうございます!

+1

* *自分でコードを書く**。あなたが問題を抱えている場合は** [もっと研究している**](https://meta.stackoverflow.com/q/261592/1011527)の後**あなたが試したものを投稿してください** **動作しておらず、[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を提供しています。 [質問する](http://stackoverflow.com/help/how-to-ask)の良い質問をお読みください。 [ツアーに参加する](http://stackoverflow.com/tour)と[this](https://meta.stackoverflow.com/q/347937/1011527)を必ずお読みください。 –

+0

クロス集計クエリを探しています。 [例](http://evolt.org/node/26896) –

+0

@JayBlanchardは、質問がどこにあるのかを示す質問にSQL Fiddleを追加し、クエリに必要な追加内容を明確にするために質問を編集しました。 –

答えて

1

のために選択したカウントの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; 
+0

例のSQL Fiddleは次のとおりです。http:// sqlfiddle .com /#!9/323bbb/32。それは問題の発生によって結果を注文できることを除いて、ほとんどすべてを持っています。たとえば、どの製品が「欠損部品」または「破損部品」を最も多く含むか? –

+0

私は先に進み、あなたの答えを受け入れ、混乱を避けるために質問の後半を新しい質問に移しました。 https://stackoverflow.com/questions/45044970/mysql-order-by-occurrences-of-a-specified-value –

1

湯あなたは集計には2つのレベルでかなり近づくことができ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 
+0

あなたの答えをありがとう。これまでのところどこにあるのかを示す質問にSQL Fiddleの例を追加しました。基本的にそこに書式化されたデータは、製品のために提出された問題とその問題が発生した回数を列挙するべき「Issues」列を除いて、正確にどのようなものである必要があります。次に、問題の発生数でソートできるようにする必要があります。たとえば、最も高い数の「欠落部分」があります。それは理にかなっていますか? –

+0

t1.issueとcount_issueは、isseusが返され、関連する発生時刻が返され、coun_issue shoudlによる注文は、発生件数でリストの注文を返します。 – scaisEdge

関連する問題