私の問題を明確にすることができることを願っています。
テーブルtweets
内の各データの情報を抽出したいというdaterange
テーブルがあります。このテーブルには 142 の日付が含まれており、そのうち 102 の日付のプロパティtrading
(市場が開かれた日) が 1 に設定されています ( trading=1
)。
tweets
以下のクエリは、表から 20 社 ( で識別)の情報を抽出しますsp100_id
。したがって、予想される結果セットには 20 x 102 = 2,040 行が含まれます。ただしtweets
、一部の日付と会社の組み合わせではテーブルにデータが保持されないため、1,987 行しか返されません。ただし、これらの「空の日」を結果セットに含める必要があります。を使用してこれを達成できると思っていましたが、データがない場合COALESCE(X, 0)
は戻りますが、結果は同じで、1,987 行です。0
この情報と以下のクエリに基づいて、テーブル内の各行daterange._date
に対して102 行 (それぞれ 1 行trading=1
)を返す方法を知っている人はいますか?sp100_id
tweets
SELECT
sp100.sp100_id,
daterange._date,
COALESCE(SUM(IF(tweets.classify1=2, tweets.`retweet_count`, 0)),0) AS `pos-retweet`,
COALESCE(SUM(IF(tweets.classify1=2, tweets.`user-quality`, 0)),0) AS `pos-quality`,
COALESCE(SUM(IF(tweets.classify1=2, tweets.`follow`, 0)),0) AS `pos-follow`,
COALESCE(SUM(IF(tweets.classify1=3, tweets.`retweet_count`, 0)),0) AS `neg-retweet`,
COALESCE(SUM(IF(tweets.classify1=3, tweets.`user-quality`, 0)),0) AS `neg-quality`,
COALESCE(SUM(IF(tweets.classify1=3, tweets.`follow`, 0)),0) AS `neg-follow`
FROM
sp100
CROSS JOIN
daterange
LEFT JOIN
tweets
ON tweets.nyse_date = daterange._date
AND tweets.sp100_id = sp100.sp100_id
WHERE sp100.sp100_id BETWEEN 1 AND 20 AND tweets.type != 1 AND daterange.trading = 1
GROUP BY
sp100.sp100_id, daterange._date
それ以外の場合は、SQLFiddle を提供しますが、SQLFiddle に使用されるテーブルの適切な部分をエクスポートするのは大変な作業ですが、実際の SQL の達人には解決策が明らかな場合があります :-)