1

みんなが元気でいることを願っています。

次の出力があります...

+---------+--------------+--------------+--------- --+---------+----------+
| | ord_num | サインオフ日 | プログラム名 | prod_desc | tx_comp | 優先順位 |
+---------+--------------+--------------+--------- --+---------+----------+
| | 1234567 | 2012-08-12 | を学ぶ | 実行 | 1 | 1 |
| | 1234567 | 2012-08-12 | を学ぶ | 計画 | 1 | 1 |
| | 1234568 | 2012-08-12 | その他 | 実行 | 1 | 1 |
| | 1234569 | 2012-08-12 | その他 | 実行 | 0 | 1 |
+---------+--------------+--------------+--------- --+---------+----------+

私がやりたいのは、一意の「ord_num」ごとに1回SUMの列です。tx_comp

タスクの種類についてGROUP BY ord_numも行うので、今は使用できません。sum

前が何だったのかを知る必要があるようでord_num、違う場合は合計ですか?

どんなアイデアでも大歓迎です。

ありがとう。

* 編集 *

SELECT 
    signoff_date,
    SUM(IF(prod_desc = 'run', 1, 0)) AS run,
    SUM(IF(prod_desc = 'plan', 1, 0)) AS plan,
    SUM(tx_comp) AS tx_comp 
FROM
(
    SELECT 
        ord_num,
        signoff_date,
        program_name,
        prod_desc,
        tx_comp,
        priority 
    FROM
        test.orders 
        LEFT JOIN test.tx_comp USING (ord_num)
) AS grp

明らかに望ましい出力ではありません

+--------------+------+------+---------+
| | サインオフ日 | 実行 | 計画 | tx_comp |
+--------------+------+------+---------+
| | 2012-08-12 | 3 | 1 | 3 |
+--------------+------+------+---------+

私は後...

+--------------+------+------+---------+
| | サインオフ日 | 実行 | 計画 | tx_comp |
+--------------+------+------+---------+
| | 2012-08-12 | 3 | 1 | 2 |
+--------------+------+------+---------+
4

2 に答える 2

2

tx_comp の値が常に 1 または 0 の場合は、 を活用できCOUNT()ます。これにより、より多くのオプションが得られる可能性があります。たとえば、tx_comp が 1 である個別の ord_num をカウントできます。

COUNT(distinct IF(tx_comp, ord_num, NULL))

これにより、次の最終クエリが得られます。

SELECT signoff_date,
  SUM(IF(prod_desc = 'run', 1, 0)) AS run,
  SUM(IF(prod_desc = 'plan', 1, 0)) AS plan,
  COUNT(distinct IF(tx_comp, ord_num, NULL)) as tx_comp
FROM 
  test.orders
  JOIN test.tx_comp USING (ord_num)
  GROUP BY signoff_date

この場合、サブクエリは必要ありません。(編集: JOIN 用に更新)

サンプルデータでこれをテストしました。唯一の依存関係は、tx_comp のセマンティックな性質にあります。あなたは「SUM」と言っていましたが、これは値が最大で 1 になることを前提としています (ブール値のフラグであると理解しています。別の回答のコメントで、MAX(tx_comp) が 1 を返すと述べたので、私たちは '良いです)。

于 2012-08-29T05:22:58.623 に答える
0

MAXの代わりにSUM使用するだけですか?tx_compあなたのデータのセマンティクスについてはわかりませんが、それがあなたが望んでいることだと思います。実際、runandplanについても同じかもしれません。

さらに言えば、ブール値を扱っているので、本当に欲しいのはです。BIT_OR

于 2012-08-29T04:29:45.223 に答える