問題は、選択しているフィールドとは異なるフィールドセットでグループ化していることです。そのクエリはちょうど偶然によって働いています。つまり、あなたはWEEKOFYEARでグループ分けし、時間値を選択しています。グループ化が実際に行うことは、詳細を「削除」し、それらに機能(この場合はカウント)を適用するグループを作成することです。
これで、同時にグループ化しながら詳細を表示しようとしています。その結果、誤ったクエリが発生します。例えば、これは動作しますが、あなたに詳細が表示されません。
SELECT dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time))) as aWeek, COUNT(*) AS freq
FROM prefix_table1 a
INNER JOIN prefix_table2 b b ON a.author = b.username
GROUP BY dept, aWeek
ORDER BY aWeek
LIMIT 24
あなたの元のクエリの間違ったロジックの明確な例がある:あなたがグループ化されている場合は、(カウントがなり、のは言わせて20本の記録ディスプレイ20)...あなたはそれらのレコードの1つだけを表示することができる場合、それらのすべての時間を表示しますか?
編集:@ypercubeが言ったように
は、前のクエリを使用すると、ANSIの規格かどうかを尊重するために、サーバーを強制している場合によっては動作しない場合があります。その場合、次のクエリを実行してみてください。
SELECT dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time))) as aWeek, COUNT(*) AS freq
FROM prefix_table1 a
INNER JOIN prefix_table2 b b ON a.author = b.username
GROUP BY dept, WEEKOFYEAR(DATE(FROM_UNIXTIME(time)))
ORDER BY aWeek
LIMIT 24
これは有効なSQLではありません(MySQLでも動作する可能性はありますが)。あなたは 'WHERE'節、' SELECT'リストで定義されたエイリアスで使うべきではありません。 –
いいえ、 'WHERE'節でエイリアスを使用することはできません。私は 'GROUP BY'でそれを使用しています。これはMySQLで有効です。 –
今はテストできませんが、(厳密な)ANSI MODEが設定されていない場合にのみ実行される可能性があります。おそらくあなたはあなたの答えにそれを加えるべきです。 –