Làm cách nào để giới hạn số hàng được trả về bởi một truy vấn Oracle sau khi đặt hàng?

1077
Mathieu Longtin 2009-01-23 09:48.

Có cách nào để làm cho một Oracletruy vấn hoạt động giống như nó chứa một MySQL limitmệnh đề không?

Trong MySQL, tôi có thể làm điều này:

select * 
from sometable
order by name
limit 20,10

để lấy hàng từ thứ 21 đến thứ 30 (bỏ qua 20 hàng đầu tiên, cho 10 hàng tiếp theo). Các hàng được chọn sau order by, vì vậy nó thực sự bắt đầu từ tên thứ 20 theo thứ tự bảng chữ cái.

Trong đó Oracle, điều duy nhất mọi người đề cập đến là rownumcột giả, nhưng nó được đánh giá trước order by đó, có nghĩa là:

select * 
from sometable
where rownum <= 10
order by name

sẽ trả về một tập hợp ngẫu nhiên gồm mười hàng được sắp xếp theo tên, thường không phải là những gì tôi muốn. Nó cũng không cho phép chỉ định một độ lệch.

13 answers

670
sampathsris 2014-09-26 18:01.

Bắt đầu từ Oracle 12c R1 (12.1), có một hàng khoản hạn chế . Nó không sử dụng LIMITcú pháp quen thuộc , nhưng nó có thể thực hiện công việc tốt hơn với nhiều tùy chọn hơn. Bạn có thể tìm thấy cú pháp đầy đủ ở đây . (Cũng đọc thêm về cách hoạt động nội bộ của Oracle trong câu trả lời này ).

Để trả lời câu hỏi ban đầu, đây là câu hỏi:

SELECT * 
FROM   sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

(Đối với các phiên bản Oracle trước đó, vui lòng tham khảo các câu trả lời khác trong câu hỏi này)


Ví dụ:

Các ví dụ sau đây được trích dẫn từ trang được liên kết , với hy vọng ngăn chặn sự cố liên kết.

Thiết lập

CREATE TABLE rownum_order_test (
  val  NUMBER
);

INSERT ALL
  INTO rownum_order_test
SELECT level
FROM   dual
CONNECT BY level <= 10;

COMMIT;

Có gì trong bảng?

SELECT val
FROM   rownum_order_test
ORDER BY val;

       VAL
----------
         1
         1
         2
         2
         3
         3
         4
         4
         5
         5
         6
         6
         7
         7
         8
         8
         9
         9
        10
        10

20 rows selected.

Nhận Nhàng đầu tiên

SELECT val
FROM   rownum_order_test
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;

       VAL
----------
        10
        10
         9
         9
         8

5 rows selected.

Lấy Ncác hàng đầu tiên , nếu hàng Nthứ ba có dây buộc, hãy lấy tất cả các hàng được buộc

SELECT val
FROM   rownum_order_test
ORDER BY val DESC
FETCH FIRST 5 ROWS WITH TIES;

       VAL
----------
        10
        10
         9
         9
         8
         8

6 rows selected.

x% Hàng trên cùng

SELECT val
FROM   rownum_order_test
ORDER BY val
FETCH FIRST 20 PERCENT ROWS ONLY;

       VAL
----------
         1
         1
         2
         2

4 rows selected.

Sử dụng bù đắp, rất hữu ích cho việc phân trang

SELECT val
FROM   rownum_order_test
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;

       VAL
----------
         3
         3
         4
         4

4 rows selected.

Bạn có thể kết hợp bù đắp với tỷ lệ phần trăm

SELECT val
FROM   rownum_order_test
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 20 PERCENT ROWS ONLY;

       VAL
----------
         3
         3
         4
         4

4 rows selected.
802
Kosi2801 2009-01-23 09:55.

Bạn có thể sử dụng một truy vấn con cho điều này như

select *
from  
( select * 
  from emp 
  order by sal desc ) 
where ROWNUM <= 5;

Ngoài ra, hãy xem chủ đề Về ROWNUM và giới hạn kết quả tại Oracle / AskTom để biết thêm thông tin.

Cập nhật : Để giới hạn kết quả với cả giới hạn thấp hơn và giới hạn trên, mọi thứ trở nên cồng kềnh hơn một chút với

select * from 
( select a.*, ROWNUM rnum from 
  ( <your_query_goes_here, with order by> ) a 
  where ROWNUM <= :MAX_ROW_TO_FETCH )
where rnum  >= :MIN_ROW_TO_FETCH;

(Được sao chép từ AskTom-article được chỉ định)

Cập nhật 2 : Bắt đầu với Oracle 12c (12.1), có một cú pháp có sẵn để giới hạn các hàng hoặc bắt đầu ở các khoảng lệch.

SELECT * 
FROM   sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

Xem câu trả lời này để biết thêm ví dụ. Cảm ơn Krumia về gợi ý.

187
zeldi 2011-07-01 04:20.

Tôi đã thực hiện một số kiểm tra hiệu suất cho các cách tiếp cận sau:

Asktom

select * from (
  select a.*, ROWNUM rnum from (
    <select statement with order by clause>
  ) a where rownum <= MAX_ROW
) where rnum >= MIN_ROW

Phân tích

select * from (
  <select statement with order by clause>
) where myrow between MIN_ROW and MAX_ROW

Thay thế ngắn

select * from (
  select statement, rownum as RN with order by clause
) where a.rn >= MIN_ROW and a.rn <= MAX_ROW

Các kết quả

Bảng có 10 triệu bản ghi, sắp xếp trên hàng ngày giờ chưa lập chỉ mục:

  • Giải thích kế hoạch hiển thị cùng một giá trị cho cả ba lựa chọn (323168)
  • Nhưng người chiến thắng là AskTom (với số liệu phân tích theo sát phía sau)

Chọn 10 hàng đầu tiên đã mất:

  • AskTom: 28-30 giây
  • Phân tích: 33-37 giây
  • Thay thế ngắn: 110-140 giây

Chọn các hàng từ 100.000 đến 100.010:

  • AskTom: 60 giây
  • Phân tích: 100 giây

Chọn hàng từ 9.000.000 đến 9.000.010:

  • AskTom: 130 giây
  • Phân tích: 150 giây
55
Leigh Riffel 2009-01-24 04:28.

Một giải pháp phân tích chỉ với một truy vấn lồng nhau:

SELECT * FROM
(
   SELECT t.*, Row_Number() OVER (ORDER BY name) MyRow FROM sometable t
) 
WHERE MyRow BETWEEN 10 AND 20;

Rank()có thể được thay thế cho Row_Number()nhưng có thể trả về nhiều bản ghi hơn bạn mong đợi nếu có các giá trị trùng lặp cho tên.

28
beldaz 2013-09-24 17:09.

Trên Oracle 12c (xem mệnh đề giới hạn hàng trong tham chiếu SQL ):

SELECT * 
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
14
Bartek 2014-04-13 07:32.

Các truy vấn phân trang với thứ tự thực sự phức tạp trong Oracle.

Oracle cung cấp một cột giả ROWNUM trả về một số cho biết thứ tự trong đó cơ sở dữ liệu chọn hàng từ bảng hoặc tập hợp các dạng xem được kết hợp.

ROWNUM là một cột giả khiến nhiều người gặp rắc rối. Giá trị ROWNUM không được gán vĩnh viễn cho một hàng (đây là một sự hiểu lầm phổ biến). Nó có thể gây nhầm lẫn khi giá trị ROWNUM thực sự được chỉ định. Giá trị ROWNUM được chỉ định cho một hàng sau khi nó chuyển các vị từ bộ lọc của truy vấn nhưng trước khi tổng hợp hoặc sắp xếp truy vấn .

Hơn nữa, giá trị ROWNUM chỉ được tăng lên sau khi nó được gán.

Đây là lý do tại sao truy vấn followin không trả về hàng nào:

 select * 
 from (select *
       from some_table
       order by some_column)
 where ROWNUM <= 4 and ROWNUM > 1; 

Hàng đầu tiên của kết quả truy vấn không vượt qua vị từ ROWNUM> 1, vì vậy ROWNUM không tăng lên 2. Vì lý do này, không giá trị ROWNUM nào lớn hơn 1, do đó, truy vấn trả về không có hàng nào.

Truy vấn được xác định đúng sẽ trông giống như sau:

select *
from (select *, ROWNUM rnum
      from (select *
            from skijump_results
            order by points)
      where ROWNUM <= 4)
where rnum > 1; 

Tìm hiểu thêm về truy vấn phân trang trong các bài viết của tôi trên blog Vertabelo :

  • Giải thích về ROWNUM Oracle
  • Top-N và truy vấn phân trang
14
Vlad Mihalcea 2019-08-14 09:48.

Chuẩn SQL

Như tôi đã giải thích trong bài viết này , vì phiên bản 12c Oracle hỗ trợ SQL: 2008 Standard, cung cấp cú pháp sau để giới hạn tập kết quả SQL:

SELECT
    title
FROM
    post
ORDER BY
    id DESC
FETCH FIRST 50 ROWS ONLY

Oracle 11g và các phiên bản cũ hơn

Trước phiên bản 12c, để tìm nạp các bản ghi Top-N, bạn phải sử dụng bảng dẫn xuất và cột giả ROWNUM:

SELECT *
FROM (
    SELECT
        title
    FROM
        post
    ORDER BY
        id DESC
)
WHERE ROWNUM <= 50
6
Lukasz Szozda 2019-08-19 09:02.

Là một phần mở rộng của câu trả lời được chấp nhận Oracle sử dụng nội bộ các ROW_NUMBER/RANKhàm. OFFSET FETCHcú pháp là một đường cú pháp.

Nó có thể được quan sát bằng cách sử dụng DBMS_UTILITY.EXPAND_SQL_TEXTquy trình:

Chuẩn bị mẫu:

CREATE TABLE rownum_order_test (
  val  NUMBER
);

INSERT ALL
  INTO rownum_order_test
SELECT level
FROM   dual
CONNECT BY level <= 10;
COMMIT;

Truy vấn:

SELECT val
FROM   rownum_order_test
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;

là thường xuyên:

SELECT "A1"."VAL" "VAL" 
FROM  (SELECT "A2"."VAL" "VAL","A2"."VAL" "rowlimit_$_0", ROW_NUMBER() OVER ( ORDER BY "A2"."VAL" DESC ) "rowlimit_$$_rownumber" 
      FROM "ROWNUM_ORDER_TEST" "A2") "A1" 
WHERE "A1"."rowlimit_$$_rownumber"<=5 ORDER BY "A1"."rowlimit_$_0" DESC;

db <> bản trình diễn fiddle

Tìm nạp văn bản SQL mở rộng:

declare
  x VARCHAR2(1000);
begin
 dbms_utility.expand_sql_text(
        input_sql_text => '
          SELECT val
          FROM   rownum_order_test
          ORDER BY val DESC
          FETCH FIRST 5 ROWS ONLY',
        output_sql_text => x);

  dbms_output.put_line(x);
end;
/

WITH TIESđược mở rộng thành RANK:

declare
  x VARCHAR2(1000);
begin
 dbms_utility.expand_sql_text(
        input_sql_text => '
          SELECT val
          FROM   rownum_order_test
          ORDER BY val DESC
          FETCH FIRST 5 ROWS WITH TIES',
        output_sql_text => x);

  dbms_output.put_line(x);
end;
/

SELECT "A1"."VAL" "VAL" 
FROM  (SELECT "A2"."VAL" "VAL","A2"."VAL" "rowlimit_$_0", RANK() OVER ( ORDER BY "A2"."VAL" DESC ) "rowlimit_$$_rank" 
       FROM "ROWNUM_ORDER_TEST" "A2") "A1" 
WHERE "A1"."rowlimit_$$_rank"<=5 ORDER BY "A1"."rowlimit_$_0" DESC

và bù đắp:

declare
  x VARCHAR2(1000);
begin
 dbms_utility.expand_sql_text(
        input_sql_text => '
          SELECT val
FROM   rownum_order_test
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY',
        output_sql_text => x);

  dbms_output.put_line(x);
end;
/


SELECT "A1"."VAL" "VAL" 
FROM  (SELECT "A2"."VAL" "VAL","A2"."VAL" "rowlimit_$_0", ROW_NUMBER() OVER ( ORDER BY "A2"."VAL") "rowlimit_$$_rownumber" 
       FROM "ROWNUM_ORDER_TEST" "A2") "A1" 
       WHERE "A1"."rowlimit_$$_rownumber"<=CASE WHEN (4>=0) THEN FLOOR(TO_NUMBER(4)) ELSE 0 END +4 AND "A1"."rowlimit_$$_rownumber">4 
ORDER BY "A1"."rowlimit_$_0"
5
Felipe Q. Giovanoni 2011-03-03 04:32.

Ít câu lệnh SELECT hơn. Ngoài ra, ít tiêu tốn hiệu suất hơn. Tín dụng cho: [email protected]

SELECT *
    FROM   (SELECT t.*,
                   rownum AS rn
            FROM   shhospede t) a
    WHERE  a.rn >= in_first
    AND    a.rn <= in_first;
3
sandi 2016-12-09 00:11.

Nếu bạn không sử dụng Oracle 12C, bạn có thể sử dụng truy vấn TOP N như bên dưới.

SELECT *
 FROM
   ( SELECT rownum rnum
          , a.*
       FROM sometable a 
   ORDER BY name
   )
WHERE rnum BETWEEN 10 AND 20;

Bạn thậm chí có thể di chuyển điều này từ mệnh đề trong với mệnh đề như sau

WITH b AS
( SELECT rownum rnum
      , a.* 
   FROM sometable a ORDER BY name
) 
SELECT * FROM b 
WHERE rnum BETWEEN 10 AND 20;

Ở đây thực sự chúng tôi đang tạo một chế độ xem nội tuyến và đổi tên rownum thành rnum. Bạn có thể sử dụng rnum trong truy vấn chính làm tiêu chí lọc.

2
arjun gaur 2016-06-02 00:31.

Tôi đã bắt đầu chuẩn bị cho kỳ thi Oracle 1z0-047, được xác thực dựa trên 12c Trong khi chuẩn bị cho nó, tôi đã xem qua một cải tiến 12c được gọi là 'FETCH FIRST' Nó cho phép bạn tìm nạp hàng / giới hạn hàng tùy theo sự thuận tiện của bạn. Một số tùy chọn có sẵn với nó

- FETCH FIRST n ROWS ONLY
 - OFFSET n ROWS FETCH NEXT N1 ROWS ONLY // leave the n rows and display next N1 rows
 - n % rows via FETCH FIRST N PERCENT ROWS ONLY

Thí dụ:

Select * from XYZ a
order by a.pqr
FETCH FIRST 10 ROWS ONLY
1
Mehul Akabari 2017-04-13 01:01.
select * FROM (SELECT 
   ROW_NUMBER() OVER (ORDER BY sal desc),* AS ROWID, 
 FROM EMP ) EMP  where ROWID=5

lớn hơn thì giá trị tìm ra

select * FROM (SELECT 
       ROW_NUMBER() OVER (ORDER BY sal desc),* AS ROWID, 
     FROM EMP ) EMP  where ROWID>5

ít hơn thì giá trị tìm ra

select * FROM (SELECT 
       ROW_NUMBER() OVER (ORDER BY sal desc),* AS ROWID, 
     FROM EMP ) EMP  where ROWID=5
1
Sumesh TG 2018-10-15 23:13.

Đối với mỗi hàng được trả về bởi một truy vấn, cột giả ROWNUM trả về một số cho biết thứ tự mà Oracle chọn hàng từ một bảng hoặc tập hợp các hàng được kết hợp. Hàng đầu tiên được chọn có ROWNUM là 1, hàng thứ hai có 2, v.v.

  SELECT * FROM sometable1 so
    WHERE so.id IN (
    SELECT so2.id from sometable2 so2
    WHERE ROWNUM <=5
    )
    AND ORDER BY so.somefield AND ROWNUM <= 100 

Tôi đã triển khai điều này trong oraclemáy chủ11.2.0.1.0

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Một thương hiệu kế thừa khác có được cuộc sống mới khi những người chủ mới của Black Opal có được Hội chợ thời trang

Một thương hiệu kế thừa khác có được cuộc sống mới khi những người chủ mới của Black Opal có được Hội chợ thời trang

Desiree Rogers, trái, và Cheryl Mayberry McKissack Chuyển sang, Fenty Beauty và Pat McGrath, có một đế chế làm đẹp mới do phụ nữ làm chủ đang trỗi dậy. Sau thương vụ mua lại mỹ phẩm Black Opal vào tháng 9, đội ngũ quyền lực của Giám đốc điều hành công ty Desiree Rogers và Chủ tịch Cheryl Mayberry McKissack đã thông báo mua lại thương hiệu làm đẹp tiên phong Fashion Fair từ người sáng lập Johnson Publishing Company (JPC).

Ngoài việc trở nên vô nghĩa, các bên bộc lộ giới tính giờ đây đã trở nên chết người

Ngoài việc trở nên vô nghĩa, các bên bộc lộ giới tính giờ đây đã trở nên chết người

Đối với những người có quá nhiều thời gian, tiệc tiết lộ giới tính là một cách thú vị để không cần áp đặt những định kiến ​​hạn chế lên thai nhi trước một đối tượng bạn bè giả vờ quan tâm một cách lịch sự. Tuy nhiên, việc chỉ dựa vào những chiếc bánh nướng có màu nhân tạo để biểu thị một tiếng hoo-ha hoặc một đứa trẻ đi tè đã trở nên xa xỉ trong các bậc cha mẹ trên Instagram.

Kirstjen Nielsen đang cố gắng đổi mới bản thân với tư cách là một người phụ nữ 'nói ra sự thật cho sức mạnh'

Kirstjen Nielsen đang cố gắng đổi mới bản thân với tư cách là một người phụ nữ 'nói ra sự thật cho sức mạnh'

Hôm thứ Tư, cựu Bộ trưởng An ninh Nội địa Kirstjen Nielsen vì một lý do nào đó đã được đưa ra một diễn đàn để phát biểu tại Hội nghị thượng đỉnh Những người phụ nữ quyền lực nhất của Fortune. Và có thể đoán trước được, người phụ nữ giám sát các nỗ lực (đang diễn ra) của chính quyền Trump nhằm chia cắt các gia đình ở biên giới đã sử dụng thời gian của mình như một cơ hội để tự bảo vệ mình và tự nhận mình là người — và hãy hít thở sâu ở đây — “đã nói sự thật với quyền lực.

Toyota Racing Development sẽ cho ra mắt Supra 3000GT Concept, Massive Wing vào tháng tới

Toyota Racing Development sẽ cho ra mắt Supra 3000GT Concept, Massive Wing vào tháng tới

Vì thế hệ mới nhất của chiếc xe điều chỉnh được yêu thích trên thế giới hiện đã có mặt tại đây, nên chỉ có điều kiện là Toyota Racing Development sẽ đưa phiên bản Supra thế hệ thứ năm sửa đổi của riêng mình đến SEMA vào tháng tới. Toyota đã cho chúng tôi một gợi ý về những gì sẽ xảy ra trong tuần này: một chiếc Concept GR Supra 3000GT hiện đại.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language