3

私はこのSELECTを持っています:

SELECT
    m.`maschine-name` AS 'byMaschine',
    q.`mname` AS 'byMName'
FROM
    `qualitaet` q
INNER JOIN
    maschinen m ON m.maschine = q.maschine
WHERE
    q.`status`='1'
GROUP BY
    concat(q.maschine, q.mname)

そしてこの結果を得る:

| maschine-name | mname |
|     TYP 1     |   0   |
|     TYP 2     |   3   |
|     TYP 2     |   4   |
|     TYP 3     |   0   |
|     TYP 4     |   0   |

ここでSQLフィドルを参照してください

次に、追加の COUNT と Datefilter を使用してほぼ同じ SELECT を作成します。

SELECT
    m.`maschine-name` AS 'byMaschine',
    q.`mname` AS 'byMName',
COUNT(*) AS 'total'
FROM
    `qualitaet` q
INNER JOIN
    maschinen m ON m.maschine = q.maschine
WHERE
    q.`created`>=NOW() - INTERVAL 2 DAY
AND
    q.`status`='1'
GROUP BY
    concat(q.maschine, q.mname)

そしてこの結果を得る:

| maschine-name | mname | total |
|     TYP 2     |   3   |   1   |
|     TYP 3     |   0   |   2   |

ここでSQLフィドルを参照してください

2 番目の SELECT では、すべての情報が得られるわけではありません。両方の SELECT からのミックスが必要です

2 番目の SELECT は、次の結果のようになります。

| maschine-name | mname | total |
|     TYP 1     |   0   |   0   |
|     TYP 2     |   3   |   1   |
|     TYP 2     |   4   |   0   |
|     TYP 3     |   0   |   2   |
|     TYP 4     |   0   |   0   |

2つのSELECTSでRIGHT JOINすることは可能ですか? または、結果を取得する別の方法はありますか?

4

1 に答える 1

2

条件付き集計を使用します。

SELECT m.`maschine-name` AS byMaschine, q.`mname` AS byMName,
       sum(q.created >= NOW() - INTERVAL 2 DAY) as Total
FROM qualitaet q INNER JOIN
     maschinen m
    ON m.maschine = q.maschine
WHERE q.status = '1'
GROUP BY q.maschine, q.mname;

その他の提案:

  • --でグループ化列を連結する必要はありませGROUP BYんが、本当にこれを行うつもりでない限り (私は疑います)。
  • が数値の場合status、定数に単一引用符を使用しないでください。
  • 列のエイリアスに一重引用符を使用しないでください。実際、エイリアスには引用符はまったく必要ありません。
于 2015-12-31T14:41:20.633 に答える