SQLクエリに関する質問

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 14:01:05
オリジナル
1039 人が閲覧しました

テーブルグループがあり、その下には多くのフィールドがあります
ID
ユーザー
コスト
タイプ
addtime
uptime
note
.....

type には 5 つのタイプがあります、つまり 001-005、
私が欲しいもの結果は、過去 6 か月間の 001-005 の合計数をクエリします。
たとえば、1 月 1 日から 31 日までのデータをクエリします。TYPE は 001-005 です
select count(*) from groups where type=' 001' および addtime<='20130101' および addtime >= '20130130'
type='002' および addtime<='20130201' および addtime >= '20130230' のグループから count(*) を選択します
select count( *) type='003' および addtime<='20130301' および addtime >= '20130330' のグループから
type='004' および addtime<='20130401' および addtime > のグループから count(*) を選択します。 = '20130430'
select count(*) from groups where type='005' and addtime<='20130501' and addtime >= '20130530'
6 か月間クエリを実行する場合、30 回クエリを実行する必要があります。
このシステムにログインしている人が多い場合、このような SQL のクエリは非常に時間がかかります。3 人が同時にこのページを開いた場合の応答時間は約 3 秒以上になるかどうかを試してみました。これらのクエリ結果をテーブルに書き込む方法があります。クエリを実行するときに、テーブルのデータを直接クエリし、これらの SQL データが自動的に結果をクエリしてテーブルに更新する時間を設定できます。この方法では、count クエリを使用するよりもテーブルから直接データをクエリする方が高速ですが、これをどのように実装すればよいでしょうか? 私が現在使用しているのは、1 つずつクエリを実行する最も愚かな
メソッドであり、非常に行き詰まっています。

ディスカッションに返信 (解決策)

select count(*) from groups where type in('001','002','003','004','005') and addtime>='20130101 ' and addtime <= '20130630'

select count(*) from groups where type in('001','002','003','004','005') and addtime>='20130101' そしてaddtime <= '20130630'

こんにちは、ご返信ありがとうございます。この方法では、クエリは合計値になります
たとえば、1 月の TYPE =001 の場合、合計は 20 になります。 1 月の合計は 500 です
TYPE =003 1 月の合計は 3987 です
TYPE=004 1 月の合計は 9898 です
TYPE=005 1 月の合計は 123 です

select count(*) from groups where addtime>='20130101' and addtime <= '20130630' group by addtime,type
ログイン後にコピー

select type, left(addtime,6) as addtime 、 count(*) as cnt from groups group by 1, 2

そうすれば、group by type、DATE_FORMAT(addtime,'m%') も必要ありません これを試してください

select count(*) from groups where addtime>='20130101' and addtime <= '20130630' group by MONTH(addtime),type
ログイン後にコピー

select count(*) from groups where addtime>='20130101' and addtime <= '20130630' group by substring(addtime,4,2),type
ログイン後にコピー

2 つの方法:

1. SQL を使用して一時テーブルを作成します

2. where 条件に関連するインデックスを作成します


一時テーブルは良い選択であり、データが処理された後に自動的に解放されます。

group by+1 を使用してください

書き方を自分で勉強してください

クエリを減らすためにキャッシュを使用することは実際には不可能です...

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート