【问题标题】:count for each row计算每一行
【发布时间】:2011-05-03 01:44:24
【问题描述】:

这个查询有什么问题?

SELECT *, (SELECT COUNT(*)
FROM
(
    SELECT NULL
    FROM words
    WHERE project=projects.id
    GROUP BY word
    HAVING COUNT(*) > 1
) T1) FROM projects

MySQL 在“where 子句”中返回 1054 未知列“projects.id”

谢谢

【问题讨论】:

  • 什么是表结构?查询应该返回什么?

标签: mysql mysql-error-1054


【解决方案1】:

您的内部子查询对外部查询一无所知,因此projects 表不可用。

【讨论】:

  • 我怎么知道?如果我在做一个 JOIN 项目,不管项目如何,它都会计算每个单词
  • @fabjoa:您能否向我们展示您的表结构,以及预期输出中的示例?
  • 顺便说一句,恭喜获得 mySQL 金牌!
  • @Pekka:干杯 :) 你也快到了 :)
【解决方案2】:

这行得通吗?

SELECT *, (SELECT COUNT(*)
    FROM words
    WHERE words.project=projects.id) as pCount
 FROM projects

【讨论】:

  • 当我看到你的帖子时,我正要发布结构细节!竖起大拇指!
【解决方案3】:

您似乎正在尝试为每个项目计算多次出现的单词数。

您可以为所有项目运行子查询,然后使用 JOIN 从项目表中获取其余数据:

SELECT projects.*, COUNT(word) AS cnt
FROM projects
LEFT JOIN (
        SELECT project, word
        FROM words
        GROUP BY project, word
        HAVING COUNT(*) > 1
) T1
ON T1.project = projects.id
GROUP BY projects.id

结果:

身份证号码 1 0 2 1 3 2

测试数据:

CREATE TABLE projects (id INT NOT NULL);
INSERT INTO projects (id) VALUES (1), (2), (3);

CREATE TABLE words (project INT NOT NULL, word VARCHAR(100) NOT NULL);
INSERT INTO words (project, word) VALUES
(1, 'a'),
(2, 'a'),
(2, 'b'),
(2, 'b'),
(3, 'b'),
(3, 'b'),
(3, 'c'),
(3, 'c');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2019-02-13
    • 2016-06-21
    相关资源
    最近更新 更多