1
私はMySQLデータベースに2つのテーブルとホストとevents
、ありがとうとID
フィールドに参加することができます。私のクエリに対する関心の 特定のフィールドは、hosts
テーブルのため、name
です。 events
の場合はtype
です。 私はそれらの間の結合を行う場合、例の結果は次のとおりです。OSタイプの2、応用の1:だから異なるタイプのMysqlカウント
、この画像では、あなたがホストアキッレヘクタールことを例えば4つのイベントを見ることができます時間とサービスタイプの1つ。
私の質問は:アグリゲータ演算子を使用すると、すべてのホストに対して、タイプごとにいくつのイベントが分割されているかを示すことができるテーブルを作ることが可能ですか? もっとspeficically、所望のテーブルは、このヘッダを有していてもよい:
aour previuos例では、返すことができること、:
SELECT hosts.name, count(e1.type) as Applications, count(e2.type) as OS, count(e3.type) as Type
FROM hosts JOIN events e1 ON hosts.id = e1.host_id
JOIN events e2 ON hosts.id = e2.host_id
JOIN events e3 ON hosts.id = e3.host_id
WHERE e1.type = 'Applications' AND e2.type = 'OS' AND e3.type = 'Services'
GROUP BY hosts.name;
:
| Achille | 1 | 2 | 1 |
| Aiace | 1 | 1 | 0 |
| Ulisse | 0 | 0 | 1 |
私の最初の試みは、このクエリであります
ただし、動作しません。
感謝を使って!これは完全に機能します。しかし、私は私の無知を認めなければなりません。私たちはsqlのcaseオプションを持っていますか?またはPLSQLですか?そして1つの最後の命令の効果は何ですか? –
'CASE'はsqlキーワードです。 1はnull値ではなく、null以外の値を書くことができます。ここでは、条件を満たすと1を返し、そうでない場合はnullを返します。カウント関数はNULL以外の値のみをカウントする – GurV
@LucaSepe https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html – CBroe