入力テーブル:
onetsoc_code | element_id | scale_id | data_value
11-1011.00 | 2.A.1.a | IM | 4.38
11-1011.00 2.A.1.a LV 4.75
11-1011.00 2.A.1.b IM 4.38
11-1011.00 2.A.1.b LV 4.88
11-1011.00 2.A.1.c IM 4.12
11-1011.00 2.A.1.c LV 4.50
必要な出力テーブル:
onetsoc_code | element_id | data_value
11-1011.00 | 2.A.1.b | 4.88
11-1011.00 | 2.A.1.a | 4.75
11-1011.00 | 2.A.1.c | 4.50
説明:
group_id によって参照され、次に group_id 内に element_id によって参照される 15k 行を含むテーブルがあります。1 つの特定の element_id に対して特定の group_id のすべての要素を取得し、それらを並べ替えてから、最後のクエリで返された順序に基づいて別の element_id の要素を取得する 2 つの部分のクエリを実行したいと考えています。
SELECT element_id, data_value
FROM skills
WHERE element_id
IN(SELECT CAST(group_concat(CONCAT('''', element_id, '''') ORDER BY data_value DESC) as char) FROM `skills` WHERE onetsoc_code = '11-1011.00' AND scale_id = 'IM')
AND onetsoc_code = '11-1011.00'
AND scale_id = 'LV'
私はすべてを試しましたが、サブクエリは機能します(引用符なしで、charにキャストすることなく試してみましたが、適切な順序でクエリする必要があるすべてのelement_idを返します。上記のクエリを実行すると、いくつかの場合サブクエリからの element_id に対応するエントリがデータベースにあるにもかかわらず、何も返されません。
私が望む結果は、onetsoc_code = '11-1011.00' のすべての要素の data_value であり、最初に scale_id 'IM' (重要度) でソートされ、次に重要度の順序に基づいて、上記の onetsoc_code のすべての要素の data_values が scale_id 'LV' で指定されます. 最初のクエリの data_values は必要ありません。scale_id 'LV' に基づく 2 番目のクエリだけです。
また、複数のテーブル「スキル」、「能力」などでこれを行う必要があるため、このクエリを最適化できる方法は非常に役立ちます!
私は骨頭の間違いを犯していると強く疑っています。誰でもこれを解くのを手伝ってくれますか?