2016-08-04 16 views
0

を分類COUNT散乱は、私はSQLのテーブルがあります。MySQLの - 複数のレコードで

CREATE TABLE `test_results` (
`id` int AUTO_INCREMENT, 
`date_time` datetime, 
`altpn` varchar(60), 
`vsp` decimal(10,4), 
PRIMARY KEY (`id`) 
); 

VALUES 
(null, 2016-07-22 13:30:01, pn1, 14.55), 
(null, 2016-07-22 13:30:02, pn1, 14.45), 
(null, 2016-07-22 13:30:03, pn1, 14.55), 
(null, 2016-07-22 13:30:04, pn2, 14.45), 
(null, 2016-07-22 13:30:05, pn2, 14.65), 
(null, 2016-07-22 13:30:06, pn2, 14.45); 

を、私はこのような結果が必要です。

vsp - altpn - COUNT 
14.45 - pn1 - 1 
14.45 - pn2 - 2 
14.55 - pn1 - 2 
14.55 - pn2 - 0 
14.65 - pn1 - 0 
14.65 - pn2 - 1 

またaltpnすることができます - VSP - 、それはカウントされません問題。しかし、すべてのvsp値はテーブルにあるすべてのpnを含む必要があります。ゼロ値でさえ。

これも可能ですか?私のような通常のSQL操作を行うことができます。

SELECT test_results.vsp, 
     test_results.altpn, 
     COUNT(*) 
FROM  test_results 
GROUP BY test_results.vsp, 
     test_results.altpn 

と私は(チャートについて)必要なものを表にPHPでこの結果を再計算し、それがより簡単で、それはSQLで行います。

+0

は、それはあなたが求めている正確に何...あなたが望む結果を与える提出するSQLのように見えますか? PHPでそのクエリを発行し、それをWeb上のチャートに表示することについての質問ですか? –

+0

@JoelMartinez - 0の – Twelfth

+0

を削除します。@fbituco - 含めるすべてのvsp/altpnのリストを作成し、カウントクエリに残す(サブクエリにする)必要があります。どの行を含めるかについての論理はありますか? 14.65/pn1が存在し、カウントが0であるのに対して、14.75/pn1は存在しないことをどのようにして知っていますか? – Twelfth

答えて

0

あなたは近くにいます。すべての一意のvsp/altpnのリストをまとめて、それをカウントサブクエリに結合することを望むでしょう。私はあなたのためにそのリストを作成するためにaltpnの別個の値に異なるvpsのクロスジョインを使用するつもりです... vsp/altpnの組み合わせが有効なときを決定する何かがある場合、ビジネスロジックを使用することができますあなたの結果。カジュアルな検査の

select a.vsp, a.altpn, ifnull(counts.totalcount,0) 
from (select vsp.vsp, altpn.altpn 
     from (select vsp 
      from test_results 
      group by vsp)vsp 
     join 
      (select altpn 
      from test_results 
      group by altpn)altpn 
     on 1=1) a 
left join 
      (SELECT test_results.vsp, test_results.altpn, COUNT(*) as totalcount 
      FROM test_results 
      GROUP BY test_results.vsp, test_results.altpn) counts 
on a.vsp = counts.vsp and a.altpn = counts.altpn 
2
SELECT d.*, 
     c.*, 
    (SELECT count(*) 
    FROM test_results e 
    WHERE e.altpn=d.idaltpn 
    AND e.vsp=c.idvsp) 
FROM 
    (SELECT distinct(a.altpn) idaltpn 
    FROM test_results a) d, 

    (SELECT distinct(a.vsp) idvsp 
    FROM test_results a) c 
+0

こんにちは。私はこのコードを動作させることができません。 "d"の近くにエラーが表示されています。 "d JOIN"で置き換えることは役に立ちません。 – fbituco

関連する問題