SQL умножает выбор и группировку, используя "первый 1"

Несмотря на запутанный заголовок, я думаю, что это довольно просто, у меня есть база данных в следующем формате: (ПРИМЕР)

---------------------------------
| X101| X102      | X103 | X104 |
---------------------------------
| COD | PROD_NAME | TYPE | INFO | 

| 05  | PROD A1   | 05   | ABC  |
| 019 | TAPE 01   | 05   | ABC  |
| 052 | MASTER 0  | 03   | ABC  |
| 111 | APPLE     | 03   | ABC  |
| 150 | RANDOM0   | 05   | ABC  |
| 235 | ITEM661   | 03   | ABC  |
| 290 | ITEM874   | 03   | ABC  |
---------------------------------

Я пытался во многих отношениях, но я не дал результата. База данных насчитывает чуть более 20 тысяч товаров, я хотел знать, как "выбрать первые 1" каждого ТИПА ("группировать по ТИПУ" и показывать только "первую 1" каждого типа)

База данных Firebird 1.5.

3 ответа

Первый, в каком порядке, в частности?

WITH TYPES AS
(
  SELECT TYPE, COUNT(*) AS 'COUNT' FROM EXAMPLE GROUP BY TYPE
)
SELECT
  TYPE,
  (SELECT TOP 1 PROD_NAME FROM EXAMPLE e WHERE e.TYPE = t.TYPE ORDER BY COD ASC) AS 'FIRST', 
  COUNT
FROM TYPES t

Это приводит к следующему:

TYPE | FIRST    | COUNT
-----|----------|------
03   | MASTER 0 | 4
05   | TAPE 01  | 3

Это то, что вы после?

Можно использовать хранимые процедуры.

CREATE PROCEDURE SelectFirstOfTypes() 
         RETURNS (COD INT, PROD_NAME VARCHAR(15), TYPE INT, INFO VARCHAR(15)) AS 
BEGIN 
  FOR SELECT DISTINCT TYPE FROM EXAMPLE INTO :TYPE DO BEGIN
    FOR SELECT FIRST 1 e.COD, e.PROD_NAME, e.INFO FROM EXAMPLE e
    WHERE :TYPE = e.TYPE  INTO :COD, :PROD_NAME, :INFO DO BEGIN
       SUSPEND; 
    END
  END 
END;

GRANT SELECT ON EXAMPLE TO SelectFirstOfTypes;

SELECT * FROM SelectFirstOfTypes();

Обратите внимание, что оба SELECT операторы заключены в цикл FOR.

  • внешний - потому что он может вернуть несколько строк,
  • внутренний - потому что он может вернуть ноль строк для определенных типов

Некоторые ссылки

Если у вас нет условий для "первого 1", вы можете просто попробовать.

SELECT * FROM yourTable GROUP BY TYPE
Другие вопросы по тегам