flags
2つCOUNT
のを抽出しようとしているというテーブルがあります。
私は1たいCOUNT
年の開始と別々以来、フラグの数のためにCOUNT
今週の配分のため。
私が使用しているクエリは次のとおりです。
SELECT
COUNT(f1.ID) AS `Total Flags`,
COUNT(f2.ID) AS `Weekly Flags`
FROM `frog_flags`.`flags` f1
LEFT JOIN `frog_flags`.`flags` f2
ON f1.`ID` = f2.`ID`
WHERE
f2.`Datetime` > '2013-07-08 00:00:00'
AND
( f1.`Staff_ID` = '12345' AND f2.`Staff_ID` = '12345')
AND
f1.`Datetime` > '2012-09-01 00:00:00'
データは0
用意されていますが、との両方で表示されTotal Flags
ていWeekly Flags
ます。
WHERE
同じテーブルを2回JOINしようとしたために、句を混乱させたのではないかと思います。
同じテーブルを異なる値でCOUNTしようとすると、句を誤って使用していませんか?
これはクロス集計SQLクエリです。コツをつかめば、すばらしいデザインパターンになります。
SELECT
sum( case when `Datetime`> '2012-09-01 00:00:00' then 1 else 0 end) AS `Total Flags`,
sum( case when `Datetime`> '2013-07-08 00:00:00' then 1 else 0 end) AS `Weekly Flags`
FROM `frog_flags`.`flags` f1
WHERE f1.`Staff_ID` = '12345'
条件を使用して、合計される基本的にブールフラグを作成します。これにより、行ではなく、事前定義された多数の新しい列が可能になります。
あなたはそれをさらに進めて、すべてのスタッフのために同時にそれをすることができます:
SELECT
f1.`Staff_ID`,
sum( case when `Datetime`> '2012-09-01 00:00:00' then 1 else 0 end) AS `Total Flags`,
sum( case when `Datetime`> '2013-07-08 00:00:00' then 1 else 0 end) AS `Weekly Flags`
FROM `frog_flags`.`flags` f1
WHERE f1.`Staff_ID` = '12345'
GROUP BY f1.`Staff_ID`
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加