使用复杂的SQL查询覆盖百分比…?

好的,我一直在努力解决这个问题大约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

一旦找到每个应用程序的第二个技术人员,这将停止计数.

如果你有一些应用程序,但有很多人,那么效率很高.

点赞