問題タブ [mysql-variables]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - グループ化された結果の各グループの上位 n レコードを取得する
以下は可能な限り単純な例ですが、どのようなソリューションでも n 個の上位の結果が必要になるまでスケーリングできる必要があります。
次のような表のように、人、グループ、年齢の列がある場合、各グループの最年長 2 人をどのように取得しますか? (グループ内の同点はそれ以上の結果をもたらさないはずですが、最初の 2 つをアルファベット順に示します)
望ましい結果セット:
注:この質問は、グループ化されたSQL 結果の各グループの最大値を持つレコードを取得する - 各グループから単一のトップ行を取得するための前の質問に基づいており、@Bohemian から素晴らしい MySQL 固有の回答を受け取りました:
方法はわかりませんが、これを基に構築できれば幸いです。
mysql - select内で変数を定義し、同じselect内で使用します
このようなことをする可能性はありますか?
2 列目は常に NULL になります。奇妙なことは、次のようなことをしながら
すべてが期待どおりに機能します。なんで?
mysql - SQL ステートメントでの mysql セッション変数値の優先順位
SQL ステートメントで使用される場合のセッション変数の標準的な動作は何ですか。
ケース 1 :
次の例では、セッション変数が期待どおりに動作しています。
上記の例では、集計関数を使用していません。
ケース 2 : 、、などの
集計関数を使用して同様のステートメントを実行すると、結果のパターンがまったく異なります。count
sum
group by
次の例を見つけてください: SQL Fiddle
このクエリを投稿する前に、SQL-Query-Order-of-Operationsを理解しようとしました。
mysql - MySQL: 連続した月のレコード数
私はこれを検索しましたが、同様の質問と回答はすべて機能しないほど異なっています。
次のフィールドを持つテーブルがあります:人、物、パーデート。人が新しいものを購入するたびに、新しいレコードが入力されます。
人が何か「もの」を購入した連続した月を数えたいと思います (thing01 または thing02 は関係ありません)。連続する purdays に休憩がある場合は、カウントを最初からやり直す必要があります。
データを同封して、これで終わりたいと思います。
個人の個別のリスト、extract(year_month from purdate) を取得できることはわかっていますが、これはこのSQLFIDDLEで実行しましたが、連続したレコードのみをカウントして、区切りからやり直す方法がわかりません (私のデータのように、person_02 が 3 月と 5 月の間に壊れています。)
データは次のとおりです。
mysql - SQLを使用して100の異なるテーブルから上位10パーセントを抽出する
個別の employee_ID と Salary を持つ 100 個のテーブルを含むデータベースがあります。データベースの合計行数は 1 億 (100 テーブルのすべての行の合計) です。テーブルの行数が等しくありません。100 個のテーブルが地域に応じているとしましょう。すべてのテーブルから給与の上位 10% を返したいと考えています。どうすればそれができますか?
php - 同じクエリで異なる結果を示す PHP と MySQL
ローカルの MySQL データベースで直接実行すると正常に動作する MySQL クエリがありますが、PHP を介して実行すると異なる結果が表示されます。
またはワンライナーとして:
結果:
PHP の結果:
a)count
必要なように増加していない
b) a) 必要以上の行が表示されているため (ID ごとに 3 つに制限する必要があります)
何度も確認しましたが、両方のクエリはまったく同じです。ユーザー入力や PHP の違いはありません。
同様の質問を既に確認しましたが、どれも役に立ちませんでした。次のクエリは、MySQL と PHP の両方で同じ結果を示しています。
この違いをケーシングする問題を知っている人はいますか?
詳細情報を編集してください:
また、クエリを実行する前に、次のものを使用して、または使用せずに試しました。
mysql - インデックスをカバーしていても COUNT(DISTINCT) の速度を最適化する
MySql には約 3,000 万レコードのテーブルがあります。以下はテーブル構造です。
以下は私の質問です
IN 操作を使用する代わりに UNION ALL を実行しています
以下は私の説明文です
- COUNT(subscriber_id) を COUNT(*) に変更しましたが、パフォーマンスの向上は見られませんでした。
2. クエリから COUNT(DISTINCT subscriber_id) を削除したところ、パフォーマンスが大幅に向上しました。以前は 50 秒から 1 分かかっていた結果が約 1.5 秒で得られます。しかし、クエリからのsubscriber_idの個別のカウントが必要です
以下は、クエリから COUNT(DISTINCT subscriber_id) を削除したときの説明です
- UNION ALL を削除して、3 つのクエリを個別に実行しました。1 つのクエリは 32 秒かかり、他のクエリはそれぞれ 1.5 秒かかりますが、最初のクエリは約 350K レコードを処理し、他のクエリは 2k 行しか処理しません
除外することでパフォーマンスの問題を解決できCOUNT(DISTINCT...)
ますが、それらの値が必要です。値を取得するためにクエリをリファクタリングしたり、インデックスなどを追加したりする方法はありますCOUNT(DISTINCT...)
が、はるかに高速ですか?
UPDATE 次の情報は、上記の表のデータ分布に関するものです
1 ドメイン 1 キャンペーン 20 log_types 1k-200k サブスクライバー
私が実行している上記のクエリは、18 万人以上のサブスクライバーを持つドメインです。
mysql - グループ化による SQL ユーザー スコアのランキング
私は次のランキングシステムを持っています。
ご覧のとおり、2 人のユーザーが同じ XP を持っています。
私はそれらの両方を持たせたいと思ってrank = 2
おり、残りはから従うべき3
です。
どうすればこのようにグループ化できますか?