2017-06-03 18 views
0


私のデータベースには次のテーブルがあります。私は参加するために使用できる重要な列のみを列挙しました。
COUNT値のMySQL JOINテーブル

enter image description here

私は現在、私は、割り当てられたライセンスに関しては、各COUNT

ため

select 
    products.id,products.name,COUNT(assigned_licenses.id) 
from 
    deployment_users 
inner join 
    assigned_licenses 
on 
    deployment_users.id = assigned_licenses.deployment_user_id 
inner join 
    products 
on 
    assigned_licenses.id = products.id 
and 
    deployment_users.customer_id = 10 
group by 
    assigned_licenses.id 
; 
を2つの別々のクエリを使用している次のような出力
enter image description here

を取得する必要があります 総ライセンスの場合

select 
    products.id,products.name,COUNT(total_licenses.id) 
from 
    customers 
inner join 
    total_licenses 
on 
    customers.iccode = licenses.iccode 
inner join 
    products 
on 
    total_licenses.id = products.id 
and 
    customers.id = 10 
group by 
    total_licenses.id 
; 

リストする必要が1,000以上の製品があるので、私は単一query.Howにそれらを結合したい私はそれを行うことができますか?

答えて

1

の両方に参加してみたが、私はこれで行くだろう。

SELECT 
    products.id, 
    products.name, 
    Count(Distinct total_licenses.id) As CountTotalLicenses, 
    Count(Distinct assigned_liceses.deployment_users_id) As CountAssignedLicenses 
FROM products 
    LEFT JOIN total_licenses ON total_licenses.products_id = products.id 
    LEFT JOIN customers ON customers.iccode = total_licenses.customers_iccode 
    LEFT JOIN assigned_licenses ON assigned_liceses.total_licenses_id = total_licenses.id 
WHERE 
    customers.id = 10 
GROUP BY 
    products.id, 
    products.name 

将来的にコードを画像としてではなくコードとして貼り付けることができれば、素晴らしいことです。人々はコードの貼り付けスニペットを単純にコピーすることはできず、すべてをもう一度入力する必要があります。

+0

Cool。あなたは 'deployment_users'をまったく使っていませんでした。このクエリの背後にある考え方を説明できますか? – Pradeep

+0

おっしゃっているよね:) – chickahoona

+0

「どうやって動くの?」という意味なら、 "Count(Distinct ...)"という表現は、グループとの間にあります。値が(5、2、4、2、1)の列Xを持つ5行がある場合、4を返します。値(3、3、5、5)の場合は2を返します。その価値の多くの「ユニークな」出現が存在し、それらを数えます。これはあなたがそれを理解するのに役立ちますか? – chickahoona

0

(。例えば、ユーザは、全ライセンスなしでライセンスを割り当てられていることができますか?私のクエリは失敗しますyesの場合)あなたの仕様は解釈の余地を残して、あなたのクエリ

SELECT * FROM (
    (First Query) as assigned_licn 
    INNER JOIN 
    (Second Query) as total_licn 
    USING (id) 
);