我有以下查询:
SELECT saturday_combinations.index, v.val AS `row` , COUNT( * ) AS `count`
FROM saturday_combinations
INNER JOIN (
SELECT ONE AS val
FROM saturday_combinations
WHERE ONE IS NOT NULL
UNION
SELECT TWO AS val
FROM saturday_combinations
WHERE TWO IS NOT NULL
UNION
SELECT THREE AS val
FROM saturday_combinations
WHERE THREE IS NOT NULL
UNION
SELECT FOUR AS val
FROM saturday_combinations
WHERE FOUR IS NOT NULL
UNION
SELECT FIVE AS val
FROM saturday_combinations
WHERE FIVE IS NOT NULL
UNION
SELECT SIX AS val
FROM saturday_combinations
WHERE SIX IS NOT NULL
UNION
SELECT SEVEN AS val
FROM saturday_combinations
WHERE SEVEN IS NOT NULL
) v ON v.val = saturday_combinations.ONE
OR v.val = saturday_combinations.TWO
OR v.val = saturday_combinations.THREE
OR v.val = saturday_combinations.FOUR
OR v.val = saturday_combinations.FIVE
OR v.val = saturday_combinations.SIX
OR v.val = saturday_combinations.SEVEN
GROUP BY v.val
查询的目的是提供表saturday_combinations表中ONE,TWO,THREE,FOUR,FIVE,SIX和SEVEN列中包含的不同值的计数。但是我想设置一个desc限制4,以便它只根据最后4行(最后4个最大索引)执行计数。但我没有让它与工会合作。最后添加顺序和限制仅限于最终选择,而不是获取最后4行并计算它们的分布。有什么提示吗?
表模式如下:
index | ONE|TWO|THREE|FOUR|FIVE|SIX|SEVEN
1 1 3 7 10 11 12 13
2 3 4 5 30 31 22 23
3 1 2 3 4 5 6 7
4 1 2 3 4 5 6 7
5 1 2 3 4 5 6 7
6 1 2 3 4 5 6 7
7 1 2 3 4 5 6 7
8 1 2 3 4 5 6 7
9 1 2 3 4 5 6 7
10 1 2 3 4 5 6 7
索引是自动递增的,ONE-SEVEN具有整数值。
表格中有大约3000行,我想根据最后n行计算每个值的出现次数。
Ideal result for the last n rows where n = last 3 rows should be
Numbers|Count
1 3
2 3
3 3
4 3
5 3
6 3
7 3
如果我增加n以包含最后6行,则其计数应该增加。如果我可以持续10行,则计数应该增加,其他数字应该随计数出现。
这是真实表格样本的链接。 http://sqlfiddle.com/#!2/d035b
答案 0 :(得分:2)
如果我的评论回答为yes
,那么您可以尝试以下方法。当您需要将limit, order by
添加到union selects
时,您需要使用括号union queries
包裹()
。
代码:
(SELECT ONE AS val
FROM saturday_combinations
WHERE ONE IS NOT NULL
order by ONE desc limit 4)
UNION
(SELECT TWO AS val
FROM saturday_combinations
WHERE TWO IS NOT NULL
order by TWO desc limit 4)
UNION
(SELECT THREE AS val
FROM saturday_combinations
WHERE THREE IS NOT NULL
order by THREE desc limit 4)
如果我的评论回答为no
,请澄清。
以下是基于您的样本日期的代码:
select distinct x.one as uniqunumbers,
count(x.one) as counts
from(
sELECT DISTINCT 'one'
AS col1, one FROM sat_comb
UNION ALL
SELECT DISTINCT 'two'
AS col1, two FROM sat_comb
UNION ALL
SELECT DISTINCT 'three'
AS col1, three FROM sat_comb
) as x
group by x.one;
UNIQUNUMBERS COUNTS
1 1
3 2
4 1
5 1
7 1
引用:“但是我想限制它,以便它首先占用最后n行,然后计算这n行中的值。这意味着,如果我有3列,3000行和35行随机出现在这3000行中的整数应该计算每个整数出现的次数。“
查询:
select x.one as uniqunumbers,
count(x.one) as counts
from(
(sELECT DISTINCT 'one'
AS col1, one FROM sat_comb
order by id desc limit 4)
UNION ALL
(SELECT DISTINCT 'two'
AS col1, two FROM sat_comb
order by id desc limit 4)
UNION ALL
(SELECT DISTINCT 'three'
AS col1, three FROM sat_comb
order by id desc limit 4)
UNION ALL
(SELECT DISTINCT 'four'
AS col1, four FROM sat_comb
order by id desc limit 4)
UNION ALL
(SELECT DISTINCT 'five'
AS col1, five FROM sat_comb
order by id desc limit 4)
UNION ALL
(SELECT DISTINCT 'six'
AS col1, six FROM sat_comb
order by id desc limit 4)
UNION ALL
(SELECT DISTINCT 'seven'
AS col1, seven FROM sat_comb
order by id desc limit 4)
) as x
group by x.one;
输出:
UNIQUNUMBERS COUNTS
2 4
3 3
4 3
5 4
6 4
8 3
9 4
20 3
答案 1 :(得分:2)
也许我在您的请求中遗漏了某些内容,但根据您所需的结果,为什么不只是取消数据并执行计数。
select value, count(*) Total
from
(
select 'one' col, one value
from saturday_combinations
union all
select 'two' col, two value
from saturday_combinations
union all
select 'three' col, three value
from saturday_combinations
union all
select 'four' col, four value
from saturday_combinations
union all
select 'five' col, five value
from saturday_combinations
union all
select 'six' col, six value
from saturday_combinations
union all
select 'seven' col, seven value
from saturday_combinations
) src
group by value
您的样本结果是:
| VALUE | TOTAL |
-----------------
| 1 | 1 |
| 3 | 2 |
| 4 | 1 |
| 5 | 1 |
| 7 | 1 |
| 10 | 1 |
| 11 | 1 |
| 12 | 1 |
| 13 | 1 |
| 22 | 1 |
| 23 | 1 |
| 30 | 1 |
| 31 | 1 |
编辑#1:根据您的更新,这可能需要您:
select value, count(*)
from
(
select col, value
from
(
select 'one' col, one value
from saturday_combinations
order by one
limit 3
) one
union all
select col, value
from
(
select 'two' col, two value
from saturday_combinations
order by two desc
limit 3
) two
union all
select col, value
from
(
select 'three' col, three value
from saturday_combinations
order by three
limit 3
) three
union all
select col, value
from
(
select 'four' col, four value
from saturday_combinations
order by four
limit 3
) four
union all
select col, value
from
(
select 'five' col, five value
from saturday_combinations
order by five
limit 3
) five
union all
select col, value
from
(
select 'six' col, six value
from saturday_combinations
order by six
limit 3
) six
union all
select col, value
from
(
select 'seven' col, seven value
from saturday_combinations
order by seven
limit 3
) seven
) src
group by value
结果:
| VALUE | COUNT(*) |
--------------------
| 1 | 3 |
| 2 | 1 |
| 3 | 4 |
| 4 | 4 |
| 5 | 3 |
| 6 | 3 |
| 7 | 3 |
答案 2 :(得分:0)
如果您想查看最终解决方案: http://sqlfiddle.com/#!2/867a6/13 感谢@bonCodigo的所有帮助