【发布时间】:2020-09-30 08:11:16
【问题描述】:
我需要查询帮助我有这种格式的表格
uniqueid|createdDate|ask1|ask2|ask3|ask4|ask5
--------------------------------------------
10001 |2020-09-30 |Yes |Yes |Yes |Yes |Yes
10002 |2020-09-30 |Yes |No |Yes |Yes |Yes
我想要这样的结果查询
uniqueid|createdDate|Yes|No|percent
--------------------------------
10001 |2020-09-30 |5 |0 |100%
10002 |2020-09-30 |4 |1 |95%
这是我的查询
SELECT
uniqueid,
createdDate,
@yes := SUM(CASE WHEN ask1 = 'Yes' THEN 1 ELSE 0 END)+SUM(CASE WHEN ask2 = 'Yes' THEN 1 ELSE 0 END)+SUM(CASE WHEN ask3 = 'Yes' THEN 1 ELSE 0 END)+SUM(CASE WHEN ask4 = 'Yes' THEN 1 ELSE 0 END)+SUM(CASE WHEN ask5 = 'Yes' THEN 1 ELSE 0 END) as 'Yes',
SUM(CASE WHEN ask1 = 'No' THEN 1 ELSE 0 END)+SUM(CASE WHEN ask2 = 'No' THEN 1 ELSE 0 END)+SUM(CASE WHEN ask3 = 'No' THEN 1 ELSE 0 END)+SUM(CASE WHEN ask4 = 'No' THEN 1 ELSE 0 END)+SUM(CASE WHEN ask5 = 'No' THEN 1 ELSE 0 END) as 'No',
FLOOR(@yes/5)*100 as 'percent'
FROM table
GROUP BY uniqueid
为什么@yes 只从最后一行数据中获取最后一个值。我需要帮助来解决这个问题。
【问题讨论】:
-
1) UDV 在分组查询中不会被正确处理。 2) 解释从显示的源数据(尤其是 95% 的值)中产生这种输出的算法。
-
这是一个非常糟糕的数据库设计。您应该将答案放在与第一个表相关的自己的表中。然后你甚至不能很容易地计算百分比你也可以随意使用你喜欢的答案,而无需每次都更改数据库
标签: mysql sql datetime sum case