【发布时间】:2015-05-14 02:42:04
【问题描述】:
我有 2 个表(负载 + 道路),我想创建一个新视图,通过创建新列(标志)来索引行的 COUNT,然后按这个新索引进行分组。 我试过这个:(但它不起作用)
sprintf(my_cmd,
"CREATE VIEW myVIEW(id, Rlength, Llength, flag) AS "
"SELECT road.id, road.length, load.length, COUNT(*) AS flag
FROM road, load "
"WHERE road.id=load.id; "
"SELECT id, Rlength, Llength
FROM myVIEW"
"GROUP BY flag");
错误: 执行查询时出错:错误:列“road.id”必须出现在 GROUP BY 子句中或用于聚合函数中
我正在使用我的 SQL。
*编辑:
我不希望新列(标志)出现在最后一个 SELECT 中,但我想按它分组.. 不知道是否可以完成。如果没有,我想达到的事情是在“SELECT id,Rlength,Llength”上使用 group by 并将所有行放在一个组中,但是我在这些行之间没有 Common 参数,所以我试图添加这个“标志”
完整代码(抱歉问题太长):
sprintf(my_cmd,
"CREATE VIEW myVIEW3(id, Rlength, Llength, flag) AS"
" SELECT road.id, road.length, load.length, COUNT(*) AS flag
FROM road, load"
" WHERE road.id=load.id;"
" SELECT id, Rlength, Llength FROM myVIEW3"
" GROUP BY flag"
" HAVING COUNT(*) <= %d"
" ORDER BY (CAST(Llength AS float) / CAST(Rlength AS float)) DESC, id DESC",k);
而我正在尝试做的是在不使用 LIMIT/TOP (它的分配)的情况下进行一些 ORDER 后获取前 k 行。所以我尝试使用带有一些指示符的新 VIEW,我将使用这些指示符将所有行分组为一组,然后使用 HAVING COUNT(flag)
道路:
.---------------------------------------------------------- |身份证 |长度 |速度 | .--------.--------------------------------------------------
| 9 | 55 | 90 |
| 10 | 44 | 80 |
| 11 | 70 | 100 |
加载:
.---------------------------------------------------------- |身份证 |长度 |速度 | .--------.--------------------------------------------------
| 9 | 10 | 20 |
| 10 | 15 | 30 |
| 11 | 30 | 60 |
命令: loadRanking 2 (k=2,所以我想在某个 ORDER 之后得到前 2 行,我们先不讨论这个结果中的 ORDER)
结果:
.---------------------------------------------------------- |身份证 |长度 |速度 | .--------.--------------------------------------------------
| 9 | 10/55 | 20/90 |
| 10 | 15/44 | 30/80 |
【问题讨论】:
-
你真的应该向我们展示一些你想要得到的样本输出。否则,我们无法确定地向您提供查询。
-
好的,我会编辑的。谢谢