假设我有一个格式为sql的表:
id INT PRIMARY KEY AUTO_INCREMENT,
action TINYINT NOT NULL,
user_id INT NOT NULL
我想构建一个产生与以下相同结果的查询:
SELECT
(SELECT COUNT(*), action FROM table WHERE action=1 AND user_id=1),
(SELECT COUNT(*), action FROM table WHERE action=2 AND user_id=1),
(SELECT COUNT(*), action FROM table WHERE action=3 AND user_id=1),
...
(SELECT COUNT(*), action FROM table WHERE action=n AND user_id=1)
(1 - n仅是action
)
但没有所有冗余和低效率。
答案 0 :(得分:3)
如果我正确理解了这个问题,那就是你要找的东西:
SELECT action, COUNT(*)
FROM your_table
WHERE user_id = 1
GROUP BY action
答案 1 :(得分:2)
您可以使用GROUP BY:
SELECT
COUNT(*) as Count,
action as Action
FROM table1
WHERE user_id = 1
GROUP BY action
这将为每个唯一操作生成一行,并且在该行中有一列Count,即具有该唯一操作的行数。
在上面的示例中,所有user_id条件都是= 1,因此如果是这种情况,您可以将其包含在查询中,否则您可以根据所需的值形成自己的条件。
答案 2 :(得分:0)
SELECT COUNT(id), action FROM table WHERE user_id=1 GROUP BY action
HTH,虽然如果你正在寻找的话,我有点困惑。