1. SQL / Говнокод #6966

    −116

    1. 1
    SELECT COUNT(DISTINCT p.productID) as cnt FROM (SELECT DISTINCT p.productID FROM SC_products p AND collection!=2 ) AS p

    мало того, что тут синтаксические ошибки, так еще и суть просто шедевральная

    Запостил: CRRaD, 16 Июня 2011

    Комментарии (13) RSS

    • подзапрос для подсчета кол-ва строк, подходящих под условие? круто.
      Ответить
    • если p.productID не является unique или primary key, то может найти collenction где не только <> 2, а где и =2. Тем самым получается ещё один подводный риф
      секция where ещё оригинально пропущена))
      но если же он является, и видно что человек "знает" про distinct в агрегирующих функциях, то почему бы сразу не использовать?
      SELECT COUNT(DISTINCT ProductID) cnt
      FROM SC_products
      WHERE collection <> 2
      Ответить
      • > SELECT COUNT(DISTINCT
        и вы туда же?
        Ответить
        • если ProductID неукальный и нам необходимо посчитать количество различных ProductID, как вы будете писать SQL запрос. Просветите
          Ответить
          • select count(`ProductID`) from ddd group by `ProductID`
            не ?
            Ответить
            • Таблица Outcomes(ship,battle,result)
              result не примари кей и значения повторяются
              ship battle result
              Bismarck North Atlantic sunk
              California Guadalcanal damaged
              CAlifornia Surigao Strait ok
              Duke of York North Cape ok
              Fuso Surigao Strait sunk
              Hood North Atlantic sunk
              King George V North Atlantic ok
              Kirishima Guadalcanal sunk
              Prince of Wales North Atlantic damaged
              Rodney North Atlantic OK
              Schamhorst North Cape sunk
              South Dakota Guadalcanal damaged
              Tennessee Surigao Strait ok
              Washington Guadalcanal ok
              West Virginia Surigao Strait ok
              Yamashiro Surigao Strait sunk
              это данные
              SELECT COUNT(result) a FROM Outcomes GROUP BY result

              возвращает
              a
              3
              7
              6
              А что же вернёт
              SELECT COUNT(DISTINCT result) a FROM Outcomes

              a
              3
              а если посмотреть разных результатов у нас действительно три: sunk, ok, damaged. И теперь, пожалуйста, будьте добры, объясните мне, почему же так сильно результатые расходятся
              так же хотелось бы мнение выслушать тех, кто плюсанул
              Ответить
              • в первом случае количество строк с одинаковым результом
                во втором количество различных результов
                Ответить
                • так а найти нужно-то что было? зачем эта лишняя информация?
                  Ответить
              • case-insensitive collation detected
                альзо, батюшка запрещает сделать справочник результов
                Ответить
    • Номальный код. Ящитаю, ОП гонит. Нужно не забывать, что с подзапроса идет уже отсортированный набор записей и count(distinct) по сути будет стоить столько же, сколько и обычный count.
      Т.е. запрос по стоимости получется равен уже предложенному выше варианту
      SELECT COUNT(DISTINCT ProductID) cnt
      FROM SC_products
      WHERE collection <> 2

      Так-то!
      Ответить
      • > с подзапроса
        сам-то с области, что-ли?
        SELECT FROM SELECT - говно
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий