好的,我一直在努力解决这个问题大约2个小时…请告知:
表:
PROFILE [id (int), name (varchar), ...]
SKILL [id (int), id_profile (int), id_app (int), lvl (int), ...]
APP [id (int), ...]
lvl基本上可以从0到3.
我想要得到这个特殊的数据:
“至少有两个技能为2或更高的人所覆盖的应用程序的百分比是多少?”
非常感谢
最佳答案
SELECT AVG(covered)
FROM (
SELECT CASE WHEN COUNT(*) >= 2 THEN 1 ELSE 0 END AS covered
FROM app a
LEFT JOIN skill s ON (s.id_app = a.id AND s.lvl >= 2)
GROUP BY a.id
)
更有效的MySQL方式:
SELECT AVG
(
IFNULL
(
(
SELECT 1
FROM skill s
WHERE s.id_app = a.id
AND s.lvl >= 2
LIMIT 1, 1
), 0
)
)
FROM app a
一旦找到每个应用程序的第二个技术人员,这将停止计数.
如果你有一些应用程序,但有很多人,那么效率很高.