2

出力が正しくない内部選択の使用に問題があります。どんな助けでも大歓迎です。

これが私のSQLFiddleの例です。

これが私が使用しているクエリです。

SELECT 
t.event as event_date,
count((
    SELECT
        count(s.id)
    FROM mytable s
    WHERE s.type = 2 AND s.event = event_date
)) AS type_count,
count((
    SELECT
        count(s.id)
    FROM mytable s
    WHERE s.type != 3 AND s.event = event_date
)) as non_type_count
FROM mytable t
WHERE t.event >= '2013-10-01' AND t.event <= '2013-10-08'
GROUP BY t.event

私の現在の出力:

October, 01 2013 00:00:00+0000 / 2 / 2

October, 03 2013 00:00:00+0000 / 1 / 1

The output I am trying to get:

October, 01 2013 00:00:00+0000 / 1 / 2

October, 03 2013 00:00:00+0000 / 0 / 0

したがって、使用しようとしているクエリを見ると、基本的に日付範囲でテーブルをクエリしようとしており、内部選択を使用してタイプに一致する行を取得しています。事前にご協力いただきありがとうございます。

4

3 に答える 3

3

少し単純化して、条件付き集計を使用してサブセレクトを除外できます。

SELECT 
    t.event as event_date,
    SUM(t.type = 2) AS type_count,
    SUM(t.type != 3)AS non_type_count
FROM mytable t
WHERE t.event >= '2013-10-01' AND t.event <= '2013-10-08'
GROUP BY t.event

デモ: SQL フィドル

式は true/false に対して 1 または 0 を返すため、これは MySQL で機能します。他のデータベースでは、次の方法で同じことを達成できますSUM(CASE WHEN type=2 THEN 1 END)

于 2013-10-23T19:18:29.310 に答える
1

この方法を試してください:

SELECT 
    t.event as event_date,
    SUM( case when type = 2 then 1 else 0 end )
       AS type_count,
    SUM( case when type != 3 then 1 else 0 end )
       as non_type_count
FROM mytable t
WHERE t.event >= '2013-10-01' AND t.event <= '2013-10-08'
GROUP BY t.event

デモ: --> http://sqlfiddle.com/#!2/19f3d/13

于 2013-10-23T19:21:16.917 に答える