22. SELECT p.product_id, COUNT(f.bug_id) AS count_fixed , COUNT(o.bug_id) AS count_open
FROM BugsProducts p
INNER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
INNER JOIN BugsProducts p2 USING (product_id)
INNER JOIN Bugs o
ON (p2.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p.product_id = 1
GROUP BY p.product_id;
27. SELECT p.product_id, COUNT(f.bug_id) AS count_fixed , COUNT(o.bug_id) AS count_open
FROM BugsProducts p
INNER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
INNER JOIN BugsProducts p2 USING (product_id)
INNER JOIN Bugs o
ON (p2.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p.product_id = 1
GROUP BY p.product_id;
①
②
①でstatusが'FIXED'
②でstatusが'OPEN'を求め
USINGで両者を関連付けているように見えて関連付けられていないため
①と②の2つの間に関連を制限する条件が持たないのでデカルト積が生じている。
44. SELECT p.product_id, COUNT(f.bug_id) AS count_fixed
FROM BugsProducts p
LEFT OUTER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
WHERE p.product_id = 1
GROUP BY p.product_id;
SELECT p.product_id, COUNT(o.bug_id) AS count_open
FROM BugsProducts p
LEFT OUTER JOIN Bugs o
ON (p.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p.product_id = 1
GROUP BY p.product_id;
SELECT p.product_id, COUNT(f.bug_id) AS count_fixed , COUNT(o.bug_id) AS count_open
FROM BugsProducts p
INNER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
INNER JOIN BugsProducts p2 USING (product_id)
INNER JOIN Bugs o
ON (p2.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p.product_id = 1
GROUP BY p.product_id;
48. (SELECT p.product_id, 'FIXED' AS status, COUNT(f.bug_id) AS bug_count
FROM BugsProducts p
LEFT OUTER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
WHERE p.product_id = 1
GROUP BY p.product_id)
UNION
(SELECT p.product_id, 'OPEN' AS status, COUNT(o.bug_id) AS bug_count
FROM BugsProducts p
LEFT OUTER JOIN Bugs o
ON (p.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p.product_id = 1
GROUP BY p.product_id)
ORDER BY bug_count DESC;
SELECT p.product_id, COUNT(f.bug_id) AS count_fixed , COUNT(o.bug_id) AS count_open
FROM BugsProducts p
INNER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
INNER JOIN BugsProducts p2 USING (product_id)
INNER JOIN Bugs o
ON (p2.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p.product_id = 1
GROUP BY p.product_id;
52. SELECT p.product_id,
SUM(CASE b.status WHEN 'FIXED' THEN 1 ELSE 0 END) AS count_fixed,
SUM(CASE b.status WHEN 'OPEN' THEN 1 ELSE 0 END) AS count_open
FROM BugsProducts p
INNER JOIN Bugs b USING (bug_id)
WHERE p.product_id = 1
GROUP BY p.product_id;
SELECT p.product_id, COUNT(f.bug_id) AS count_fixed , COUNT(o.bug_id) AS count_open
FROM BugsProducts p
INNER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
INNER JOIN BugsProducts p2 USING (product_id)
INNER JOIN Bugs o
ON (p2.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p.product_id = 1
GROUP BY p.product_id;
55. SELECT t1.product_id, count_fixed, count_open
FROM
(
SELECT p.product_id, COUNT(f.bug_id) AS count_fixed
FROM BugsProducts p INNER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
WHERE p.product_id = 1
GROUP BY p.product_id
) t1,
(
SELECT p2.product_id, COUNT(o.bug_id) AS count_open
FROM BugsProducts p2 INNER JOIN Bugs o
ON (p2.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p2.product_id = 1
GROUP BY p2.product_id
) t2
WHERE t1.product_id = t2.product_id;
SELECT p.product_id, COUNT(f.bug_id) AS count_fixed , COUNT(o.bug_id) AS count_open
FROM BugsProducts p
INNER JOIN Bugs f
ON (p.bug_id = f.bug_id AND f.status = 'FIXED')
INNER JOIN BugsProducts p2 USING (product_id)
INNER JOIN Bugs o
ON (p2.bug_id = o.bug_id AND o.status = 'OPEN')
WHERE p.product_id = 1
GROUP BY p.product_id;
64. SELECT CONCAT(
'UPDATE Inventory SET last_used = ''', MAX(u.usage_date), '''',
' WHERE inventory_id = ', u.inventory_id, ';') AS update_statement
FROM ComputerUsage u
GROUP BY u.inventory_id;
出力された結果をコピペして
SQL文として実行する。