一連の管理情報を取得するために、MySQL でストアド プロシージャを作成しています。問題は、結果が「垂直」ではなく「水平」である必要があることです。さらに詳しく説明すると、これが私が対処しなければならないデータベース設計です。
users
- company_id
- user_type_id
companies
- company_id
user_types
- user_type_id
- ディスクリプタ
取り決めは次のとおりです。すべてのユーザーを記述子別にグループ化し、次に会社別にグループ化する必要があります。私はそのようにすることができます:
SELECT
COUNT(*) AS number,
ut.descriptor,
company_id
FROM
users u
INNER JOIN
user_types ut
ON ut.user_type_id = u.user_type_id
AND descriptor LIKE 'xyz%'
INNER JOIN
companies c
ON u.company_id = c.company_id
GROUP BY
ut.descriptor,
company_id
ただし、これにより正しい結果が得られます。このリストは「垂直」です。記述子ごとに新しい行を取得します。私は実際に記述子を列にしたいと思っています。行は会社別にグループ化する必要があります。これは、アプリケーション ロジックが期待するものです。
最初に記述子をフェッチし、後で計算を行うことを考えましたが、まったく同じ問題が残ります。記述子ごとにサブクエリを実行できますが、それは非常に見苦しいものです。
要約すると、期待される結果は次のようになります。ここで、後の 3 つの列は実際には user_types テーブルの記述子です。
company
- admin
- customer
-supplier
1 - 4 - 1 - 5
1 - 7 - 4 - 2
会社 1 には 4 人の管理者、1 人の顧客、5 人のサプライヤがいます。会社 2 には、7 人の管理者、4 人の顧客、2 人のサプライヤーがいます。
ここで何かが欠けていると本当に思います。私は何を見落としていますか?