2016-11-13 8 views
3

私はSQLで最初のステップを実行しようとしています。現在、私はデータベースを分析しようとしており、説明できない問題を踏んだ。最終的に誰かが私にヒントを与えることができます。COUNTコマンドを使用したSQLの不一致

私はmySQLテーブル( 'cap851312')の魔女には330.178のテーブル行があります。私はすでにExcelにテーブルをインポートし、この番号を確認しました!

すべての単一の行には、エントリ日付のフィールド(ID_MES_ANO列)が含まれています。当分の間、すべての日付は一意に設定されます"201312"

次のコマンドを実行すると、結果として表示される行の数は476.598になります。

SELECT movedb.cap851312.ID_MES_ANO, count(*) 
    FROM movedb.cap851312; 

私はすでにExcelにファイルをインポートし、行数を確認しました。確かに、それは330.178です!

どうすれば正確に間違っているのか分かりますか?


更新:

私が試してみた:

SELECT count(*) FROM movedb.cap851312 

これは、同様に476.598を返します。

私はWorkbenchを使用しているので、330.178のテーブル行の数値を簡単に確認できました。


アップデート2:

ザ・ワークベンチ表インスペクタを確認: "表の行:330178" - :私は

に文を変更し

解決


がよくわからない理由

SELECT count(ID_MES_ANO) FROM movedb.cap851512; 

今回は結果が330178です!

+0

SELECT件数(*)を試してください FROM movedb.cap851312; – sorencito

+1

Excelのバージョンによって、行の最大数が異なります。 –

+1

Workbenchを使用して330.178の表の行数を確認しましたか? – Solarflare

答えて

0

COUNT(*)はすべての行をカウントします。

COUNT(ID_MES_ANO)は、ID_MES_ANOがnullでない行のみをカウントします。

したがって、2つの違いはID_MES_ANOがヌルの行です。

あなたがところで

SELECT count(*) FROM movedb.cap851512 WHERE ID_MES_ANO IS NULL; 

でこれを確認できます

SELECT movedb.cap851312.ID_MES_ANO, count(*) FROM movedb.cap851312; 

手段:(GROUP BYことなく集約関数COUNTを使用して)単一の結果行にすべての行を集約。この結果の行には、ID_MES_ANOとすべてのレコードの数が表示されます。標準のSQLではこれを許可していません。何十万というレコードのうちID_MES_ANOがDBMSに表示されないためです。MySQLはここで標準に違反し、行から任意にID_MES_ANOを選択します。

関連する問題