я получаю следующую ошибку: Не могу открыть таблицу: ошибка 't1'.Пожалуйста помогите - PullRequest
0 голосов
/ 16 февраля 2019

Я получаю #1137 - Can't reopen table: 't1' ошибку

У меня есть пример кода ниже

CREATE TEMPORARY TABLE  temp_table ( INDEX(productName),INDEX(age))
AS 

 select productName,age from productsmarket Inner Join customer on productsmarket.customer_username = customer.username;


 select    distinct t1.productName, (

select age

from temp_table t2

 where t2.productName = t1.productName

group by age

order by count(*) desc

limit 1
)

as age

from temp_table t1

Я хотел бы вернуть два столбца productName и age

1 Ответ

0 голосов
/ 16 февраля 2019

Я не думаю, что вам не нужно создавать временную таблицу (или постоянную таблицу) для этого.Функция плотного ранга (намного проще в mysql 8 и выше), но здесь она смоделирована.

drop table if exists productsmarket;
CREATE table productsmarket (productname varchar(3),customer_username int);
insert into productsmarket values
('aaa',4),('aaa',2),('aaa',4),
('bbb',1),('bbb',4);

и customer

+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | abc  |   10 |
|    2 | def  |   10 |
|    3 | ghi  |   10 |
|    4 | jkl  |   11 |
|    5 | jkl  |   11 |
+------+------+------+
5 rows in set (0.04 sec)

select productname,age,obs,
         if(productname <> @p, @rn:=1,if(obs <> @po,@rn:=@rn+1,@rn:=@rn)) denserank,
         @p:=productname pname,
         @po:=obs po
from
( 
select productName,age,count(*) obs
from productsmarket 
Inner Join customer on productsmarket.customer_username = customer.id
group by productName,age
) s
cross join (select @rn:=0,@p:=0,@po:=0) r
having denserank = 1
order by productname,obs desc
;

+-------------+------+-----+-----------+-------+----+
| productname | age  | obs | denserank | pname | po |
+-------------+------+-----+-----------+-------+----+
| aaa         |   11 |   2 | 1         | aaa   |  2 |
| bbb         |   10 |   1 | 1         | bbb   |  1 |
| bbb         |   11 |   1 | 1         | bbb   |  1 |
+-------------+------+-----+-----------+-------+----+

Плотный ранг полезен в случае ничьих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...