1

假设我有一个格式为的 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

但没有所有的冗余和低效率。

4

3 回答 3

3

如果我正确理解了这个问题,这就是您要查找的内容:

SELECT   action, COUNT(*)
FROM     your_table
WHERE    user_id = 1
GROUP BY action
于 2013-10-31T08:20:22.787 回答
2

您可以使用 GROUP BY:

SELECT 
COUNT(*) as Count, 
action as Action 
FROM table1 
WHERE user_id = 1
GROUP BY action

这将为每个唯一操作生成一行,并且在该行中有一列 Count 是具有该唯一操作的行数。

在上面的示例中,所有 user_id 条件都是 =1,因此如果是这种情况,您可以将其包含在查询中,否则您可以根据需要的值形成自己的条件。

于 2013-10-31T08:22:56.603 回答
0
SELECT COUNT(id), action FROM table WHERE user_id=1 GROUP BY action

HTH,虽然我有点困惑,如果这是你要找的。

于 2013-10-31T08:21:39.550 回答