我有一个带有itemid | fieldid |值的表,我正在尝试设置一个查询,它将组合一些数据并返回mathc百分比以及结果。例如,某些数据可能是
itemid fieldid value
19 193 1
45 193 1
37 201 6
25 201 1
45 201 6
19 201 6
19 201 5
现在我想要例如获取fieldid = 193 AND value = 1的所有行以及fieldid = 201 AND value = 6的行。理想的结果如下: itemid,匹配两个条件的所有itemid的百分比为100%,匹配一个的所有itemid的百分比为50%。我有这个查询用于上面的多列,但它不会在这里工作
select id,user_class,admin, (
if (admin = 1,1,0)+
if (user_class = 'SA',1,0)
)/2*100 as the_percent
from users
WHERE
admin = 1 OR user_class = 'P'
GROUP BY id
order by the_percent DESC
我还得到以下绝对匹配
SELECT users.id FROM users WHERE
users.id IN
(
SELECT DISTINCT itemid FROM extra_field_values
INNER JOIN (SELECT DISTINCT itemid FROM extra_field_values WHERE fieldid = 201 AND value = 6 ) a1 USING (itemid)
INNER JOIN (SELECT DISTINCT itemid FROM extra_field_values WHERE fieldid = 193 AND value = 1 ) a2 USING (itemid)
)
但将两者结合起来对我来说似乎有些困惑
答案 0 :(得分:1)
我认为您可以使用UNION并从table subquery中选择以实现此目的。也许有些事情如下:
SELECT itemid, count(*)/2*100 AS percent FROM
( SELECT itemid FROM extra_field_values WHERE fieldid = 201 AND value = 6
UNION ALL
SELECT itemid FROM extra_field_values WHERE fieldid = 193 AND value = 1 ) AS t
GROUP BY itemid;
我已经有一段时间了,因为我在mysql中做了很多复杂的事情,我把它放在记事本中,所以我的语法可能会关闭:)但基本上我们创建一个匹配id的视图,然后从该表创建我们的统计数据。 (你也想做一些性能评估,看看它与多个查询相比如何叠加)。